Pandas简明教程:三、Pandas文件读写


Pandas支持了非常丰富的文件类型(见文末汇总表) 1,这种操作方式极大简化了我们的文件读写,也是我们进行比赛、研究尤其是办公自动化最为直接的基础。可以说从这里开始,我们就要真正享受Pandas带来的便利了。

1、CSV文件

这里我们将前面用到的张三团伙的数据表存到一个csv文件中。

df = pd.read_csv(r"C:\Users\Administrator\Desktop\test.csv")

df

    Unnamed: 0  月份  姓名 性别  应发工资   实发工资  职位
0            0   1  张三  男  2000   1500  主犯
1            1   2  张三  男  2000   1000  主犯
2            2   3  张三  女  2000  15000  主犯
3            3   4  张三  女  2000   1500  主犯
4            4   5  张三  女  2000   1500  主犯
5            5   2  李四  男  1800   1300  从犯
6            6   3  李四  男  1800   1300  从犯
7            7   4  李四  男  1800   1300  从犯
8            8   5  李四  男  1800   1300  从犯
9            9   1  王五  女  1800   1300  龙套
10          10   2  王五  女  1800   1300  龙套
11          11   3  王五  女  1800   1300  龙套
12          12   4  王五  女  1800   1300  龙套

注:这里默认的第一列index由于在文件中是一列,因此默认读取时它是数据而不是Index.

另外,插播一个小技巧,在windows系统中如果要想快速获取文件的完整绝对路径可以这样操作:Alt+右键,弹出菜单栏里会有一个“复制为路径”,此时完整的绝对路径就在剪切板中,直接粘贴即可。

相反,如果想将上述数据存到一个csv文件中:

df = pd.to_csv(r"C:\Users\Administrator\Desktop\test.csv")

另外,如果目标文件是txt,读写方法实际上是一样的:

df = pd.read_csv(r"C:\Users\Administrator\Desktop\test.txt")
    
df = pd.to_csv(r"C:\Users\Administrator\Desktop\test.csv")

由此可见,Pandas读、写数据的方法不外乎read_+ 文件类型名,和to_文件类型名,其它的文件均类似1

2、Excel的读写

上面已经说明了Pandas的读写文件函数命名的一般规则,这里简单再介绍一些不太一样的文件类型。首先是我们最常用的Excel:

df = pd.read_excel(r"C:\Users\Administrator\Desktop\test.txt",sheet_name = 'Sheet1')
    
df = pd.to_csv(r"C:\Users\Administrator\Desktop\test.csv",sheet_name = 'Sheet1')

这里需要强调1点: Excel文件本身并不是一个表格,而是一个可以存放多个表格的容器。因此在读写时需要指定Sheet的名称。如果未指定则默认为Sheet1或者第一个Sheet

3、HTML文件的读写

这里我们直接利用官网的例子:

url = 'https://www.fdic.gov/bank/individual/failed/banklist.html'

dfs = pd.read_html(url)

dfs

[                             Bank Name           City  ST   CERT                Acquiring Institution       Closing Date
 0                 The First State Bank  Barboursville  WV  14361                       MVB Bank, Inc.      April 3, 2020
 1                   Ericson State Bank        Ericson  NE  18265           Farmers and Merchants Bank  February 14, 2020
 2     City National Bank of New Jersey         Newark  NJ  21111                      Industrial Bank   November 1, 2019
 3                        Resolute Bank         Maumee  OH  58317                   Buckeye State Bank   October 25, 2019
 4                Louisa Community Bank         Louisa  KY  58112    Kentucky Farmers Bank Corporation   October 25, 2019
 ..                                 ...            ...  ..    ...                                  ...                ...
 556                 Superior Bank, FSB       Hinsdale  IL  32646                Superior Federal, FSB      July 27, 2001
 557                Malta National Bank          Malta  OH   6629                    North Valley Bank        May 3, 2001
 558    First Alliance Bank & Trust Co.     Manchester  NH  34264  Southern New Hampshire Bank & Trust   February 2, 2001
 559  National State Bank of Metropolis     Metropolis  IL   3815              Banterra Bank of Marion  December 14, 2000
 560                   Bank of Honolulu       Honolulu  HI  21029                   Bank of the Orient   October 13, 2000
 
 [561 rows x 6 columns]]

注意:这里看起来很像是一个爬虫了,但对HTML文件的读取是有先决条件的。打开该链接简单分析可以看到,链接中的表格是直接存在标签为table的框架里的:

<table id="table" class="tablesorter">
		<colgroup>
		<col class="col1">
 		<col class="col2">
  		<col class="col3">
 		<col class="col4">
        <col class="col5">

那我们试试其它的网站行不行呢?

url = r"https://blog.csdn.net/cauchy7203"
dfs = pd.read_html(url)
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-51-fafba0f26e7e> in <module>
----> 1 dfs = pd.read_html(url)

直接报错!

再看看CSDN官网主页:

url = r"https://www.csdn.net/"
dfs = pd.read_html(url)
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
<ipython-input-53-fafba0f26e7e> in <module>
----> 1 dfs = pd.read_html(url)

结果完全一样。由此可见,想要读取html文件的前提是它的内容本身就高度格式化并且具有明显的类似table的标签才能读取。具体的一些说明可以在官网中查到,不过由此也可以看出除非一些高度结构化的网页,一般还是不要寄希望于这种方式。

另外,在使用这个功能之前需要安装lxml,可能还会用到BeautifulSoup4,可自行下载安装。

4、其它文件(数据)类型的简单说明
  • json: 最常用的数据类型之一,结构灵活丰富。读写自然是刚刚提到的read,to方法就好。

  • clipboard: 这个功能也挺好用,可以直接读、写剪贴板中的数据。

  • pickle等二进制文件:二进制文件有个最大的好处是它可以保存任何形式的数据,因为计算机软件系统的本质就是二进制。明白这一点就可以做出更高级的操作。举几个简单的例子:

    • 我有一个表,但其中某一列中,每个元素都是数组,而这会我想把数据存起来
    • 我有一个表,其中某一列每个元素都是一个具体的object,比如竞赛时我们训练好的带参数的模型

    类似的情况还有很多,都可以用这种方式来解决。

5、办公自动化问题简析

回到第一篇教程中我讲的故事,我们考虑几种简单的情景:

  • 假设高工的总表已经做好,现在需要将它按行、列拆分开存到不同的文件里
  • 假设他的表很多,现在需要将所有的表格中的数据提取出来单独做简单统计(比如求和、平均等)

那么此时可想而知,如果用Pandas我们就可以写一段或者多段程序,将表格和字段等信息作为参数,在应对同一类问题时只需要修改参数即可。那么,这样就可以实现一种简单的办公自动化功能了。

当然,关于这个话题,后面有时间我们再详细介绍。

Format TypeData DescriptionReaderWriter
textCSVread_csvto_csv
textFixed-Width Text Fileread_fwf
textJSONread_jsonto_json
textHTMLread_htmlto_html
textLocal clipboardread_clipboardto_clipboard
MS Excelread_excelto_excel
binaryOpenDocumentread_excel
binaryHDF5 Formatread_hdfto_hdf
binaryFeather Formatread_featherto_feather
binaryParquet Formatread_parquetto_parquet
binaryORC Formatread_orc
binaryMsgpackread_msgpackto_msgpack
binaryStataread_statato_stata
binarySASread_sas
binarySPSSread_spss
binaryPython Pickle Formatread_pickleto_pickle
SQLSQLread_sqlto_sql
SQLGoogle BigQueryread_gbqto_gbq
本系列教程教程完整目录:

一、Pandas简介与安装

二、Pandas基本数据结构-DataFrame与Series

三、Pandas文件读写

四、Pandas数据索引方式

五、Pandas简单统计操作及通用方式

六、Pandas条件查询

七、Pandas缺失数据的处理(数据清洗基础)

八、Pandas数据透视表

九、表的合并、连接、拼接(数据聚合基础)


  1. Pandas支持的文件与数据类型: ↩︎ ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

半个冯博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值