首先安装pandas模块
pip Install pandas 或安装集成环境 anaconda(需要下载安装包)
- pandas中读取文件的解析函数
read_csv()、read_table() 从文件中国、url、文件型对象中加载带分隔符的数据,默认逗号
read_fwf() 读取定宽列格式数据
raed_clipboard() 读取剪切板中的数据
分隔符参数:sep:指定分隔符, 支持正则表达式
上述函数将文本数据转换成DataFrame对象,这些函数的选项分为:
1、索引:将一个或多个列当成返回的DataFrame处理,以及是否丛文件、用户获取列名
2、类型推断和数据转换:包括用户定义值的转换、缺失值标记列表等
3、日期解析:包括组合功能,如将分散在多个列中的日期时间组合成结果中的单个列
4、迭代:支持对大文件进行逐块迭代
5、不规整数据问题:跳过一些行,页脚。注释或其他不重要的部分
- read_csv()读取文件
!cat ex1.csv # ipython环境支持 linux命令
a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
import pandas as pd
import numpy as np
# 使用read_csv()读取文件
# 自己定义列名, 使用names参数,接受一个列表
pd.read_csv('data/ex1.csv', sep=',', names=['a','b','c','d', 'message']) # sep 指定分隔符
# 使用默认的列名
pd.read_csv('data/ex2.csv', header=None)
# 如果想把某个列指定为DataFrame对象的索引,使用index_col参数
names = ['a','b','c','d','message']
pd.read_csv('data/ex2.csv', names=names, index_col='message')
# 如果想为DataFrame对象设置层次化索引,index_col参数接受由列编号或列名组成的列表即可
parsed = pd.read_csv('data/csv_mindex.csv', index_col=['key1', 'key2'])
parsed
- 分隔符, 使用正则表达式分隔
result = pd.read_table('data/ex3.txt', sep='\s+')
result# 由于列名比数据行的数量少,所以read_csv或read_table推断第一列应该是DataFrame的索引
- 不规整数据问题
# 使用参数来处理异常数据,例如skiprows可以跳过指定索引行,跳过文件中的注释数据
pd.read_csv('data/ex4.csv', skiprows=[0,2,3])
!cat data/ex4.csv # 打印ex4.csv数据
# hey!
a,b,c,d,message
# just wanted to make things more difficult for you
# who reads CSV files with computers, anyway?
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
- 缺失值处理
!cat data/ex5.csv
""" 该数据为ex5.csv
something,a,b,c,d,message
one,1,2,3,4,NA
two,5,6,,8,world
three,9,10,11,12,foo
"""
result = pd.read_csv('data/ex5.csv')
result
pd.isnull(result) # 得到DataFrame数据对象是否为空的DataFrame数据对象
# na_values参数接受一组用于表示缺失值的字符串, 传给na_values的值,将会被NaN替换
result = pd.read_csv('data/ex5.csv', na_values=['NULL
result
# 使用字典为各列指定不同的NA标记, 将字典传给na_values参数
sentinels = {'message':['foo','NA'],'something':['two']}
pd.read_csv('data/ex5.csv', na_values=sentinels)
- read_csv/read_table参数
path #表示文件系统位置,URL,文件型对象的字符串
sep or delimiter #用于对行中各字段进行拆分的字符序列或正则
header #用作列名的行号
index_col #用作行索引的列编号或列名
names #用于结果的列名列表,结合header=None
skiprows #从文件开始处开始,需要跳过的行索引
na_values #用于替换NA的值
comments #用于将注释信息丛行尾拆分出去的字符
parse_dates # 尝试将数据解析成日期
date_parser #用于解析日期函数
nrows #需要读取的行数
iterator #返回一个TextParser对象以便逐行读取文件
chunksize #文件块的大小
skip_footer #需要忽略的行数(从末尾开始)
encoding #指定编码
squeeze #如果数据经过解析后仅含有一列,则返回Series对象
thousands #千分位分隔符
# nrows 指定读取的行数
result = pd.read_csv('data/ex6.csv',nrows=10)
result
# 逐块读取文本文件, chunksize参数接受行数
chunker = pd.read_csv('data/ex6.csv', chunksize=1000)
# chunker # 返回一个TextParser对象
tot = pd.Series([])
for piece in chunker:
tot = tot.add(piece['key'].value_counts(), fill_value=0)
# tot = tot.order(ascending=False)
tot[:10]
- 写出数据到文件
# 将数据写出到文本格式
data = pd.read_csv('data/ex5.csv')
print(data)
# 使用to_csv()方法将数据写到一个以逗号分隔符的文件中
data.to_csv('data/ex5out.csv')
!cat data/ex5out.csv
# to_csv() 支持其他分隔符
import sys
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, columns=['a','b','c'])
dates = pd.date_range('1/1/2000', periods=7)
ts = pd.Series(np.arange(7), index=dates)
ts.to_csv('data/tseries.csv')
!cat data/tseries.csv
- Series对象读取数据
pd.Series.from_csv('data/tseries.csv', parse_dates=True)
- python 内置的csv模块
import csv
f = open('data/ex7.csv')
reader = csv.reader(f)
for line in reader:
print line
# 处理数据格式
lines = list(csv.reader(open('data/ex7.csv')))
header, values = lines[0], lines[1:]
data_dict = {h: v for h, v in zip(header, zip(*values))}
data_dict
# CSV文件的形式很多,可以继承csv.Dialect,创建子类类定义新格式
'''参数
delimiter 分隔符
lineterminator 行结束符
quotechar 字段引用符号
quoting 引用约定
skipinitialspace 忽略分隔符后面的空格符,默认False
doublequote 处理字段内的引用符号,True为双写
escapechar 用于对分隔符进行转义的字符串
'''
f = open('data/ex7.csv')
class my_dialect(csv.Dialect):
lineterminator = '\n' # 行结束符
delimiter = ';'# 分隔符
quotechar = '"' # 字符串引用约定
quoting=1
reader = csv.reader(f, my_dialect)
for line in reader:
print line
# 手工输出分隔符文件
with open('mydata.csv', 'w') as f:
writer = csv.writer(f, dialect=my_dialect)
writer.writerow(('one','two', 'three'))
writer.writerow(('1','2','3'))
writer.writerow(('4','5','6'))
writer.writerow(('7','8','9'))
!cat mydata.csv
- json 与DataFrame
obj="""
{"name":"wes",
"places_lived":["United States", "Spain","Germany"],
"pet":null,
"siblings":[{"name":"Katie","age":33,"pet":"Cisco"}]
}
"""
import json
result = json.loads(obj) # 将字符串转换成json格式
print(type(result))
###
asjson = json.dumps(result)# 将python对象转换成json
siblings = pd.DataFrame(result['siblings'], columns=['name','age'])
siblings