pandas 存xlsx多个标签_Pandas读写文件(1)

Pandas读写文件

来源:https://realpython.com/pandas-read-write-files/

翻译:老齐

阅读本文需要10分钟


译者注: Pandas是数据科学中常用的库,用它读写文件也是常规操作,《数据准备和特征工程》一书对此有更详实的阐述。

618000209f8710ea32ad0f509d89fa87.png

本书出版时间:2020年初

Pandas是一个强大而灵活的Python程序包,允许你使用有标签的时间序列数据。它还提供统计、绘图等功能。Pandas的一个关键特性是它能够编写和读取Excel、CSV和许多其他类型的文件。类似Pandas中的read_csv()函数使你能够有效地处理文件,还可以使用一些函数将Pandas对象中的数据保存到文件中,然后将它们作为Pandas的SeriesDataFrame实例加载。

在文中,你将学习:

  • 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大学实用教程》相关章节的讲述。

62e31adc8bc6f1200849b8239c288700.png

准备数据

在本文中,将使用与20个国家相关的数据。以下是对此数据的概述:

  • 人口、面积或国内生产总值(GDP)都在前10名的国家。数据集的行是ISO 3166-1中定义的三个字母的国家代码,列是COUNTRY。
  • 人口用百万表示。这些数据来自维基百科上按人口列出的国家和地区列表,列标签是POP。
  • 面积用千平方公里表示。这些数据来自维基百科上按面积列出的国家和地区列表,列标签是AREA。
  • 根据联合国2017年的数据,国内生产总值以百万美元表示。你可以在维基百科上根据名义的GDP制作的国家列表中找到这些数据,列标签是GDP。
  • 所属洲可以是非洲、亚洲、大洋洲、欧洲、北美或南美。你也可以在维基百科上找到这些信息,列标签是CONT。
  • 独立日是纪念一个国家独立建立的日子。这些数据来自维基百科上的国家独立日列表,以ISO 8601格式显示,前四位数代表年份,接下来的两位数代表月份,后两位数代表日期。数据集的列标签是IND_DAY。

以下是把数据以表格形式显示:

COUNTRYPOPAREAGDPCONTIND_DAY
CHNChina1398.729596.9612234.78Asia
INDIndia1351.163287.262575.67Asia1947-08-15
USAUS329.749833.5219485.39N.America1776-07-04
IDNIndonesia268.071910.931015.54Asia1945-08-17
BRABrazil210.328515.772055.51S.America1822-09-07
PAKPakistan205.71881.91302.14Asia1947-08-14
NGANigeria200.96923.77375.77Africa1960-10-01
BGDBangladesh167.09147.57245.63Asia1971-03-26
RUSRussia146.7917098.251530.751992-06-12
MEXMexico126.581964.381158.23N.America1810-09-16
JPNJapan126.22377.974872.42Asia
DEUGermany83.02357.113693.20Europe
FRAFrance67.02640.682582.49Europe1789-07-14
GBRUK66.44242.502631.23Europe
ITAItaly60.36301.341943.84Europe
ARGArgentina44.942780.40637.49S.America1816-07-09
DZAAlgeria43.382381.74167.56Africa1962-07-05
CANCanada37.599984.671647.12N.America1867-07-01
AUSAustralia25.477692.021408.68Oceania
KAZKazakhstan18.532724.90159.41Asia1991-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()

ef260fe56bc19a9083e1267024b16fb3.png

读取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 。文件应该是这样的:

1b58f7dc93d14ff8be60803dfca03f95.png

文件的第一列包含索引,其他的列为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中的值。

13eeca2f35d18f42f3ce46da42ff515e.png

了解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中。其他对象也可以接受,具体取决于文件类型。

未完待续。

关注微信公众号:老齐教室。读深度文章,得精湛技艺,享绚丽人生。

9c92b8d39134627e836fd0a28f804707.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值