Pandas读写文件
来源:https://realpython.com/pandas-read-write-files/
翻译:老齐
阅读本文需要10分钟
★译者注: Pandas是数据科学中常用的库,用它读写文件也是常规操作,《数据准备和特征工程》一书对此有更详实的阐述。
”
本书出版时间:2020年初
Pandas是一个强大而灵活的Python程序包,允许你使用有标签的时间序列数据。它还提供统计、绘图等功能。Pandas的一个关键特性是它能够编写和读取Excel、CSV和许多其他类型的文件。类似Pandas中的read_csv()
函数使你能够有效地处理文件,还可以使用一些函数将Pandas对象中的数据保存到文件中,然后将它们作为Pandas的Series
或DataFrame
实例加载。
在文中,你将学习:
- Pandas IO工具API是什么
- 如何在文件中读写数据
- 如何使用不同的文件格式
- 如何有效地处理大数据
★因为原文篇幅较长,在公众号“老齐教室”中将分部分发布。
”
第一部分
安装Pandas
本文中的代码基于CPython 3.7.4和Pandas0.25.1,确保你的机器上有最新版本的Python和Pandas,这有益于你的学习。
首先,安装Pandas:
$ pip install pandas
安装过程完成后,Pandas就可以用了。
Anaconda是一个优秀的Python发行版,它集成了Python中许多有用的包(如Pandas)以及名叫Conda的包管理器。
也可以使用Conda安装:
$ conda install pandas
★关于第三方库的安装方法,详见《Python大学实用教程》相关章节的讲述。
”
准备数据
在本文中,将使用与20个国家相关的数据。以下是对此数据的概述:
- 人口、面积或国内生产总值(GDP)都在前10名的国家。数据集的行是ISO 3166-1中定义的三个字母的国家代码,列是COUNTRY。
- 人口用百万表示。这些数据来自维基百科上按人口列出的国家和地区列表,列标签是POP。
- 面积用千平方公里表示。这些数据来自维基百科上按面积列出的国家和地区列表,列标签是AREA。
- 根据联合国2017年的数据,国内生产总值以百万美元表示。你可以在维基百科上根据名义的GDP制作的国家列表中找到这些数据,列标签是GDP。
- 所属洲可以是非洲、亚洲、大洋洲、欧洲、北美或南美。你也可以在维基百科上找到这些信息,列标签是CONT。
- 独立日是纪念一个国家独立建立的日子。这些数据来自维基百科上的国家独立日列表,以ISO 8601格式显示,前四位数代表年份,接下来的两位数代表月份,后两位数代表日期。数据集的列标签是IND_DAY。
以下是把数据以表格形式显示:
COUNTRY | POP | AREA | GDP | CONT | IND_DAY | |
---|---|---|---|---|---|---|
CHN | China | 1398.72 | 9596.96 | 12234.78 | Asia | |
IND | India | 1351.16 | 3287.26 | 2575.67 | Asia | 1947-08-15 |
USA | US | 329.74 | 9833.52 | 19485.39 | N.America | 1776-07-04 |
IDN | Indonesia | 268.07 | 1910.93 | 1015.54 | Asia | 1945-08-17 |
BRA | Brazil | 210.32 | 8515.77 | 2055.51 | S.America | 1822-09-07 |
PAK | Pakistan | 205.71 | 881.91 | 302.14 | Asia | 1947-08-14 |
NGA | Nigeria | 200.96 | 923.77 | 375.77 | Africa | 1960-10-01 |
BGD | Bangladesh | 167.09 | 147.57 | 245.63 | Asia | 1971-03-26 |
RUS | Russia | 146.79 | 17098.25 | 1530.75 | 1992-06-12 | |
MEX | Mexico | 126.58 | 1964.38 | 1158.23 | N.America | 1810-09-16 |
JPN | Japan | 126.22 | 377.97 | 4872.42 | Asia | |
DEU | Germany | 83.02 | 357.11 | 3693.20 | Europe | |
FRA | France | 67.02 | 640.68 | 2582.49 | Europe | 1789-07-14 |
GBR | UK | 66.44 | 242.50 | 2631.23 | Europe | |
ITA | Italy | 60.36 | 301.34 | 1943.84 | Europe | |
ARG | Argentina | 44.94 | 2780.40 | 637.49 | S.America | 1816-07-09 |
DZA | Algeria | 43.38 | 2381.74 | 167.56 | Africa | 1962-07-05 |
CAN | Canada | 37.59 | 9984.67 | 1647.12 | N.America | 1867-07-01 |
AUS | Australia | 25.47 | 7692.02 | 1408.68 | Oceania | |
KAZ | Kazakhstan | 18.53 | 2724.90 | 159.41 | Asia | 1991-12-16 |
现在你已经用每个国家的数据填充了DataFrame对象。
早于3.6的Python版本不能保证字典中键的顺序。要确保为Python和pandas的旧版本保持列的顺序,可以指定index=columns:
>>> df = pd.DataFrame(data=data, index=columns).T
既然你已经准备好了数据,就可以开始处理文件了!
使用Pandas的read_csv()
和 .to_csv()
函数
CSV文件是扩展名为.csv
的纯文本文件,用于保存表格数据,这是存储大量数据的最流行的文件格式之一。CSV文件的每一行代表表格中的一行,默认情况下,同一行中的值用逗号分隔,但可以将分隔符更改为分号、制表符、空格或其他字符。
创建CSV文件
您可以用 .to_csv()
将Pandas的DataFrame类型数据保存为CSV文件:
>>> df.to_csv('data.csv')
就是这样!你已经在当前工作目录中创建了data.csv
文件,可以用下面的代码块查看CSV文件:
此文本文件包含用逗号分隔的数据。DataFrame的索引,在某些情况下无关紧要,如果不想保留它们,可以将参数index=False
传递给.to_csv()
。
读取CSV文件
一旦数据保存在CSV文件中,如果需要使用它,可以使用Pandas的read_csv()
函数:
>>> df = pd.read_csv('data.csv', index_col=0)>>> df COUNTRY POP AREA GDP CONT IND_DAYCHN China 1398.72 9596.96 12234.78 Asia NaNIND India 1351.16 3287.26 2575.67 Asia 1947-08-15USA US 329.74 9833.52 19485.39 N.America 1776-07-04IDN Indonesia 268.07 1910.93 1015.54 Asia 1945-08-17BRA Brazil 210.32 8515.77 2055.51 S.America 1822-09-07PAK Pakistan 205.71 881.91 302.14 Asia 1947-08-14NGA Nigeria 200.96 923.77 375.77 Africa 1960-10-01BGD Bangladesh 167.09 147.57 245.63 Asia 1971-03-26RUS Russia 146.79 17098.25 1530.75 NaN 1992-06-12MEX Mexico 126.58 1964.38 1158.23 N.America 1810-09-16JPN Japan 126.22 377.97 4872.42 Asia NaNDEU Germany 83.02 357.11 3693.20 Europe NaNFRA France 67.02 640.68 2582.49 Europe 1789-07-14GBR UK 66.44 242.50 2631.23 Europe NaNITA Italy 60.36 301.34 1943.84 Europe NaNARG Argentina 44.94 2780.40 637.49 S.America 1816-07-09DZA Algeria 43.38 2381.74 167.56 Africa 1962-07-05CAN Canada 37.59 9984.67 1647.12 N.America 1867-07-01AUS Australia 25.47 7692.02 1408.68 Oceania NaNKAZ Kazakhstan 18.53 2724.90 159.41 Asia 1991-12-16
在本例中,Pandas read_csv()
函数返回一个新的DataFrame
数据,第一个参数即为指定的文件data.csv
,也可以用其他任何形式的有效路径,包括URLs。
参数index_col
指定CSV文件中包含行索引的列,当CSV文件包含索引时,应确定index_col
的值,以避免将它们作为数据加载。
用Pandas读写Excel文件
Microsoft Excel可能是使用最广泛的电子表格软件,旧版本使用二进制.xls
文件,而Excel 2007引入了新的基于XML的.xlsx
文件。你可以在Pandas中读写Excel文件,类似于读写CSV文件。但是,首先需要安装以下Python包:
- xlwt,用于操作
.xls
文件 - openpyxl或XlsxWriter,用于操作
.xlsx
文件 - xlrd,用于操作Excel文件
您可以使用pip安装它们:
$ pip install xlwt openpyxl xlsxwriter xlrd
还可以使用Conda安装:
$ conda install xlwt openpyxl xlsxwriter xlrd
请注意,你不必安装所有这些软件包。例如,openpyxl和XlsxWriter,如果你只处理.xls
文件,就不需要它们。然而,要想操作.xlsx
文件,至少要安装其中一个,xlwt就不支持.xlsx
文件了。
写Excel文件
一旦安装了这些软件包,就可以使用`.to-Excel()``将DataFrame数据保存在Excel文件中:
>>> df.to_excel('data.xlsx')
这样,就在当前工作目录中创建文件data.xlsx
。文件应该是这样的:
文件的第一列包含索引,其他的列为DataFrame的数据。
读Excel文件
可以使用read_excel()
从Excel文件加载数据:
>>> df = pd.read_excel('data.xlsx', index_col=0)>>> df COUNTRY POP AREA GDP CONT IND_DAYCHN China 1398.72 9596.96 12234.78 Asia NaNIND India 1351.16 3287.26 2575.67 Asia 1947-08-15USA US 329.74 9833.52 19485.39 N.America 1776-07-04IDN Indonesia 268.07 1910.93 1015.54 Asia 1945-08-17BRA Brazil 210.32 8515.77 2055.51 S.America 1822-09-07PAK Pakistan 205.71 881.91 302.14 Asia 1947-08-14NGA Nigeria 200.96 923.77 375.77 Africa 1960-10-01BGD Bangladesh 167.09 147.57 245.63 Asia 1971-03-26RUS Russia 146.79 17098.25 1530.75 NaN 1992-06-12MEX Mexico 126.58 1964.38 1158.23 N.America 1810-09-16JPN Japan 126.22 377.97 4872.42 Asia NaNDEU Germany 83.02 357.11 3693.20 Europe NaNFRA France 67.02 640.68 2582.49 Europe 1789-07-14GBR UK 66.44 242.50 2631.23 Europe NaNITA Italy 60.36 301.34 1943.84 Europe NaNARG Argentina 44.94 2780.40 637.49 S.America 1816-07-09DZA Algeria 43.38 2381.74 167.56 Africa 1962-07-05CAN Canada 37.59 9984.67 1647.12 N.America 1867-07-01AUS Australia 25.47 7692.02 1408.68 Oceania NaNKAZ Kazakhstan 18.53 2724.90 159.41 Asia 1991-12-16
read_excel()
返回一个新的DataFrame,其中包含data.xlsx中的值。
了解Pandas的输入/输出API
Pandas IO Tools是一个API,允许你将Series和DataFrame对象的内容保存到剪贴板、对象或各种类型的文件中。它还允许从剪贴板、对象或文件加载数据。
写入文件
Series 和DataFrame对象有一些方法可以将数据写入剪贴板或文件,它们的命名模式为 .to_()
,其中 是目标文件类型。
你已经了解了 .to_csv()
和.to_excel()
,但还有其他的一些方法,包括:
.to_json()
.to_html()
.to_sql()
.to_pickle()
你还可以写入更多的文件类型,这些类型不胜枚举。
★关于Pandas中对象类型的各种操作,详见《跟老齐学Python:数据分析》有关章节的详细讲述。
”
这些方法的参数指定保存数据的目标文件路径。这在某些情况下是强制性的,在其他情况下是可选的。如果此选项可用并且你选择忽略它,则方法将返回包含DataFrame
实例内容的对象(如字符串或迭代器)。
读取文件
Pandas提供的读文件的函数函数以.read_()
模式来命名,其中表示要读取的文件类型。你已经看到了Pandas的
read_csv()
和read_excel()
函数。下面是其他的一些函数:
- read_json()
- read_html()
- read_sql()
- read_pickle()
这些函数有一个指定目标文件路径的参数,它可以是表示路径的任何有效字符串,可以在本地计算机上,也可以在URL中。其他对象也可以接受,具体取决于文件类型。
★未完待续。
”
★关注微信公众号:老齐教室。读深度文章,得精湛技艺,享绚丽人生。
”