pandas数据加载,存储及文件格式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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)

猜你喜欢

转载自blog.csdn.net/weixin_39532362/article/details/86221049