文件读写
这一章主要讲了两个问题:0. 怎么读取写入 1.从哪里读取
0.读取,读取多用的read_csv
读取前言
解析函数:
pd.read_csv
从文件、url、文件型对象中加载带分隔符得数据。默认分隔符为逗号。(看到read_csv的参数,简直吓尿了)
pd.read_table
从文件、url、文件型对象中加载分隔符的数据, 默认分隔符为制表符。
pd.ExcelFile
从excel中读取数据。
pd.read_fwf
读取定宽列格式数据。
pd.read_clipbpoard
读取剪切板中的数据,将网页数据转换成表格时很有用。
0.1 类型推断
类型推断: 即不需要指定列的类型到底时数值、整数、布尔值或者字符串。但是日期和其他自定义类型的处理需要多花点功夫。
0.2 索引
默认索引: 当读取的文件没有列名时, 可以使用pandas分配默认的列名。
原始数据为:
with open('123.csv','r')as f:
m = f.read()
print(m)
# 0,0,1,2,3
# 1,4,5,6,7
# 2,8,9,10,11
# 3,12,13,14,15
# 默认索引
pd.read_csv('123.csv', header=None)
# 返回值:
0 1 2 3 4
0 0 0 1 2 3
1 1 4 5 6 7
2 2 8 9 10 11
3 3 12 13 14 15
自定义索引:手动指定索引, 并可以设置指定的行索引。
# 自定义索引 header默认就是0
pd.read_csv('123.csv', names=['a','b','c','d'], header=0)
# 返回值
a b c d
1 4 5 6 7
2 8 9 10 11
3 12 13 14 15
# 设定指定的行索引,index_col 书中的用法已经不适用, 需要传入int。
c = pd.read_csv('123.csv', names=['a','b','c','d'], index_col=3)
a b c d
2 0 0 1 3
6 1 4 5 7
10 2 8 9 11
14 3 12 13 15
层次化索引:指定多个索引,形成层次化索引。
# index_col传入列表, 按顺序形成层次化索引。
pd.read_csv('234.csv', index_col=['key1','key2'])
key3 key4
key1 key2
one a 1 2
b 2 1
c 5 6
two a 7 8
b 9 10
0.3 数据转换
将指定的表示缺失数据的元素转换成NAN。
# 原始数据
A B C D
a 1.0 2.0 3.0 NaN
b 1.0 NaN 2.0 3.0
c NaN 1.0 3.0 2.0
d 2.0 3.0 NaN 1.0
# 除了源数据中的Na值, 也会将na-values中的值置为NA
pd.read_csv('134.csv',index_col=0, na_values=['1'])
A B C D
a NaN 2.0 3.0 NaN
b NaN NaN 2.0 3.0
c NaN NaN 3.0 2.0
d 2.0 3.0 NaN NaN
# 传入字典,可以指定某列的元素置为Na
pd.read_csv('134.csv',na_values={'A':['1','3']})
Unnamed: 0 A B C D
0 a NaN 2.0 3.0 NaN
1 b NaN NaN 2.0 3.0
2 c NaN 1.0 3.0 2.0
3 d 2.0 3.0 NaN 1.0
# 注 如果index_col有值的情况下,传入字典会报错。
0.4 日期解析
日期处理以后的文章统一处理,
0.5 块读取(迭代)
# chunksize参数将文件都读成迭代器,每次读取相应的值
chun = pd.read_csv('134.csv',chunksize=2)
for info in chun:
print (info)
print ("*"*20)
# 返回值
Unnamed: 0 A B C D
0 a 1.0 2.0 3.0 NaN
1 b 1.0 NaN 2.0 3.0
********************
Unnamed: 0 A B C D
2 c NaN 1.0 3.0 2.0
3 d 2.0 3.0 NaN 1.0
********************
0.6 不规整数据问题
手动处理分隔符格式、Json数据的处理以及HTML和XML处理数据的方式,作为爬虫来讲,用的比较多, 这里不过多展开, 简单说一下啊excel的文件的处理以及numbers文件的的处理。
处理Excel多用的是pd.read_excel, 当然也可以将excel保存为csv, 然后以read_csv的方式进行读取。 如果是mac系统的话, 可以将numbers文件保存为csv, 再用read_csv的方式进行读取。
1.写入
将文件写成csv,多用的是to_csv.
# 参数为默认
dat = DataFrame(np.arange(16).reshape(4,4),index=list('abcd'), columns=list('ABCD'))
dat.to_csv('test.csv')
# 文件中的值为
# ,A,B,C,D
# a,0,1,2,3
# b,4,5,6,7
# c,8,9,10,11
# d,12,13,14,15
# 指定的分隔符
dat.to_csv('test.csv', sep="|")
# 文件中的值为
# |A|B|C|D
# a|0|1|2|3
# b|4|5|6|7
# c|8|9|10|11
# d|12|13|14|15
#禁用行、列标签
dat.to_csv('test.csv', sep="|",index=False, header=False)
# 文件中的值为
# 0|1|2|3
# 4|5|6|7
# 8|9|10|11
# 12|13|14|15
# 指定要写的列
dat.to_csv('test.csv',columns=['A','C'])
# 文件中的值
# ,A,C
# a,0,2
# b,4,6
# c,8,10
# d,12,14
网友评论