版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39532362/article/details/86221049
读写文本格式
读取加载
# 返回Series,并解析时间索引
pd.Series.from_csv('test.csv',parse_dates=True)
# 自动生成列标,用末列设置行标
pd.read_csv('test.csv',header=None,index_col=-1)
# 层次列标,header默认=0
pd.read_csv('test.csv',header=[0,1])
# 手动设置列标,用a,d列设置层次行标
pd.read_csv('test.csv',names=['a','b','c','d'],index_col=['a','d'])
# 跳过文件的1,3行
pd.read_csv('test.csv',skiprows=[0,2])
# 接受一组用于表示缺失值的字符串,默认支持NA,NULL,-1.#IND
pd.read_csv('test.csv',na_values=['null'])
# 用字典针对列指定NA标记
pd.read_csv('test.csv',na_values={'class':['NA','null'],'student':['NULL']})
# 设置分隔符
pd.read_table('test.csv',sep=',')
# 可以为正则表达式
pd.read_table('test.csv',sep='\s+')
# 设置读取行数(避免整个文件读取)
pd.read_csv('test.csv',nrows=5)
分块读取并实现某列值得计量
# 根据chunksize对文件进行逐块迭代
chunker=pd.read_csv('test.csv',chunksize=1000)
total=pd.Series([])
for piece in chunker:
total=total.add(piece['level'].value_counts(),fill_value=0)
total.order(ascending=False)
写出存储
# 写出文件
data.to_csv('testout.csv',encoding='utf-8-sig')
# 直接写到输出流,仅打印文本
data.to_csv(sys.stdout,sep='|')
# 设置空字符串的表示形式
data.to_csv(sys.stdout,na_rep='NULL')
# 禁用行标及列标
data.to_csv(sys.stdout,index=False,header=False)
# 指定列内容及顺序
data.to_csv(sys.stdout,index=False,cols=['a','b','c'])
方法 | 说明 |
---|---|
read_csv | 从文件,URL,文件型对象加载带分隔符数据,分隔符默认为逗号(",") |
read_table | 从文件,URL,文件型对象加载带分隔符数据,分隔符默认为制表符("\t") |
read_fwf | 读取定宽列数据,没有分隔符 |
read_clipboard | 读取剪切板数据,类似于read_table,在网页转换表格时很有用 |
read_csv/read_table函数的参数
方法 | 说明 |
---|---|
path | 文件路径,URL,文件型对象的字符串 |
sep或delimiter | 用于在行中各字段进行拆分的字符串序列或正则表达式 |
header | 设置用作列标的行号,始于0,设置None时自动生成列标 |
index_col | 用作行索的列编号或列名,可以单个或多个(层次化) |
names | 手动设置列名列表,结合header=None使用 |
skiprows | 忽略或跳过的行号,始于0 |
na_values | 设置表示为Na的值 |
comment | 用于将注释信息从行尾拆分出去的字符串(一个或多个) |
parse_dates | 尝试解释数据为日期,默认为False,True时解释所有列,可指定列号或列名,时间分列是会组合解释 |
keep_date_col | 如果链接多列解释日期,则保持参与链接的列,默认False |
converters | 列号或列名跟函数之间的映射关系组成的字典,例如{‘foo’:f}会对foo列所有值应用函数f |
dayfirst | 当解析有歧义的日期时,看做国际格式(7/6/2012)=>6月7日,默认Flase |
date_parser | 用于解释日期的函数 |
nrows | 需要读取的行数,从头开始 |
iterator | 返回一个TextParser以逐块读取文件 |
chunksize | 设置迭代文件块大小 |
skip_footer | 需要忽略的行号,从尾开始 |
verbose | 打印各种解释器输出信息,比如“非数值列中缺失值的数量”等 |
encoding | 用于unicode的文本编码格式 |
squeeze | 如果数据解析后仅含一列则返回Series |
thousands | 千分位分隔符,如 “,”,"." |
手工处理分隔格式
csv.reader设置
import csv
# 继承csv.Dialect类
class my_dialect(csv.Dialect):
lineterminator='\n'
delimiter=';'
quotechar='"'
quoting=csv.QUOTE_ALL
reader=csv.reader(file,dialect=my_dialect)
# 参数形式
reader=csv.reader(file,delimiter='|')
手工处理分隔符格式
lines=list(csv.reader(open('test.csv')))
header,values=lines[0],lines[1:]
data_dict={h:v for h,v in zip(header,zip(*values))}
pd.DataFrame(data_dict)
手工输出
with open('mydata.csv','w') as file:
writer=csv.writer(file,dialect=my_dialect)
writer.writerow(('one','two','three'))
writer.writerow(('1','2','3'))
writer.writerow((4,5,6))
writer.writerow([7,8,9])
csv输入输出
方法 | 说明 |
---|---|
csv.reader | 读入 |
csv.writer | 写出 |
csv语支选项
扫描二维码关注公众号,回复:
5012292 查看本文章
方法 | 说明 |
---|---|
delimiter | 用于分隔字段单字符的字符串,默认为 (,) |
lineterminator | 用于写操作的行结束符,默认 “\r\n”,读操作忽略,能认出跨平台行结束符 |
quotechar | 用于带有特殊字符的字段的引用符合,默认(") |
quoting | 引用约定,可选值包括csv.QUOTE_ALL(引用所有字段),csv.QUOTE_MINIMAL(只引用导游分隔符之类特殊字符的字段),csv.QUOTE_NONNUMERIC以及csv.QUOTE_NON(不引用) |
skipinitialspace | 忽略分隔符后面的空白符,默认false |
doublequote | 如何处理字段内的引用符号,如为True则双写 |
escapechar | 用于对分隔符紧型转义的字符串csv.QUOTE_NON时默认禁用 |
JSON 数据
json数据与字典的转换
import json
方法 | 说明 |
---|---|
json.loads | 传入json数据的字符串,返回字典 |
json.dumps | 传入字典,返回json数据字符串 |
二进制数据格式
pickle格式
- 只建议短期保存,后版本可能无法unpickle旧版本文件
方法 | 说明 |
---|---|
DataFrame.to_pickle() | 传入path,以pickle格式写出文件,原为save |
pandas.read_pickle | 传入path,以读取pickle格式文件原为load |
HDF5
- 层次型数据格式,
- 是一个c库,带有多语言接口,java,MATLAB
- 支持多种压缩器即使压缩
- 可以高效分块读写
- 适合非常大无法放入内存的数据集
- HDFStore需要tables包
# 初始化文件
store=pd.HDFStore('mydata.h5')
# 写入
store['df1']=df1
store['df1_col_a']=df1['a']
# 读取
store['df1']
读取excel文件
- 需要xlrd和openpyxl包
xls_file=pd.ExcelFile('data.xls')
xls_file.parse('Sheet1')
xml
lxml.html.parse
解释网页获取所有a标签
# -*- coding: utf-8 -*-
from lxml.html import parse
from urllib.request import urlopen
from pandas.io.parsers import TextParser
url='https://blog.csdn.net/weixin_39532362/article/details/86221049'
doc=parse(urlopen(url)).getroot()
links=doc.findall('.//a') #XPath
data=[[lnk.text_content().strip(),lnk.get('href')] for lnk in links] #二d列表,每个元素为一行
result=TextParser(data,names=['text','add']).get_chunk(10) #获取10行
print(result) #.to_csv('rerere.csv',encoding='utf-8-sig')
lxml .objectify
解析xml文件
from lxml import objectify
path='test.xml'
parsed=objectify.parse(open(path))
root=parsed.getroot()
data=[]
skip_fields=['',''] #设置忽略字段
for elt in root.INDICATOR: #字段标签
el_data={}
for child in elt.getchildren():
if child.tag in skip_fields:
continue
el_data[child.tag]=child.pyval
data.append(el_data)
html和webAPI
import json
import requests
resp=requests.get(url)
data=json.loads(resp.text)
data.keys
数据库
sqlite3连接数据库
import sqlite3
#链接数据库
con=sqlite3.connect(':memmory:')
# 创建表
query="""
CREATE TABLE test(
a VARCHAR(20)
b VARCHAR(20)
c REAL
d INTEGER
)
"""
con.execute(query)
con.commit()
# 插入数据
data=[(),(),(),()]
con.executemany("INSERT INTO test VALUES(?,?,?,?)",data)
con.commit()
# 获取数据
cursor=con.execute('select * from test')
rows=cursor.fetchall() #rows为2d列表
pd.DataFrame(rows,columns=list(zip(*cursor.description)[0]))
pandas.io.sql
import pandas.io.sql as sql
sql.read_frame('select * from test',con)
MongoDB数据存取
import pymongo
import requests,json
con=pymongo.Connection('localhost',port=27017)
tweets=con.db.tweets #创建空的tweeds
data=json.loads(requests.get(url).text)
for tweet in data['results']:
tweets.save(tweet)
cursor=tweets.find({'from_user':'wesmckinn'}) #返回游标是一个迭代器,为每个文档产生字典
tweet_fields=['created_at','from_user','id','text']
result=pd.DataFrame(list(cursor),columns=tweet_fields)