本文最后更新于 271 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
数据的读写
Pandas模块能够读写很多格式的数据,如CSV、EXCEL、SQL、JSON、HTML,SAS,PICKLE等。在Pandas中,文件通常使用类似pd.read_xxx()
形式的函数进行读取,并使用类似.to_xxx()
形式的方法进行写入。
例如:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(3, 5),
index=list("abc"),
columns=list("ABCDE"))
df
A | B | C | D | E | |
---|---|---|---|---|---|
a | -0.020062 | -0.599706 | 0.277161 | 0.080379 | -0.646617 |
b | 1.438798 | -1.000701 | 0.091833 | -0.112943 | 0.860176 |
c | -0.171525 | 1.093374 | 0.501429 | -1.123508 | -0.930662 |
可以使用.to_csv()方法将它保存为CSV文件:
df.to_csv("foo.csv")
CSV文件可以用pd.read_csv()函数读取:
pd.read_csv("foo.csv")
Unnamed: 0 | A | B | C | D | E | |
---|---|---|---|---|---|---|
0 | a | -0.020062 | -0.599706 | 0.277161 | 0.080379 | -0.646617 |
1 | b | 1.438798 | -1.000701 | 0.091833 | -0.112943 | 0.860176 |
2 | c | -0.171525 | 1.093374 | 0.501429 | -1.123508 | -0.930662 |
与原来的DataFrame对象相比,读取到的对象多了Unnamed:0的列,它是原来DataFrame对象的行标记。在保存的时候,Pandas默认会保存行标记和列标记的值;在读取时,Pandas并不知道这一列是行标记,所以会将其当做普通的数据列读取出来。
为了解决这个问题,可以在读取时,使用参数index_col指定行标记所在的列:
pd.read_csv("foo.csv", index_col=0)
A | B | C | D | E | |
---|---|---|---|---|---|
a | -0.020062 | -0.599706 | 0.277161 | 0.080379 | -0.646617 |
b | 1.438798 | -1.000701 | 0.091833 | -0.112943 | 0.860176 |
c | -0.171525 | 1.093374 | 0.501429 | -1.123508 | -0.930662 |
也可以在保存的时候,忽略行标记:
df.to_csv("foo.csv", index=False)
pd.read_csv("foo.csv")
A | B | C | D | E | |
---|---|---|---|---|---|
0 | -0.020062 | -0.599706 | 0.277161 | 0.080379 | -0.646617 |
1 | 1.438798 | -1.000701 | 0.091833 | -0.112943 | 0.860176 |
2 | -0.171525 | 1.093374 | 0.501429 | -1.123508 | -0.930662 |
其它类型文件的读写方法类似,在具体参数上可能会有一些不同,常用的方法有:
- pandas.read_csv()函数,.to_csv()方法:CSV格式,逗号分割的文本格式。
- pandas.read_json()函数,.to_json()方法:JSON格式。
- pandas.read_html()函数,.to_html()方法:HTML网页上的表格。
- pandas.read_excel()函数,.to_excel()方法:EXCEL格式的表格。
值得注意的是,读写EXCEL时,需要调用一些额外的模块,如xlrd、xlwt、openpyxl等,如果系统没有按照这些模块,需要额外通过pip或者conda安装。
%rm foo.csv