pandas数据存储读取read_csv(), to_csv(),read_excel(), to_excel()(常用方法,例子丰富)

方法精简例子丰富

经常用到pandas数据文件的保存和读取方法,如果每次忘了都去查官方文档还蛮麻烦的。所以我这里整理了两个常用数据格式文件的存取方法。

其中介绍到的参数使用技巧都是常用的,避免介绍一些冷门的,听了以后也几乎用不到的东西。

如果我日后接触到更多的数据格式存取,或者又学会了其他实用技巧,本文还会更新。

pandas数据存储读取read_csv(), to_csv(),read_excel(), to_excel()(常用方法,例子丰富)_第1张图片

CSV文件的保存和读取

如果以下参数使用方法你都会了,之后的内容就不用看啦。

保存

保存CSV文件的函数是DataFrame.to_csv(),下面是该函数常用的参数,官方文档里有10多个参数,实际上绝大部分情况中只用到下面这几个参数,其他参数就不介绍了。

先来总体看下常用参数的默认值。

df.to_csv(path_or_buf="filename.csv" , # 保存文件的路径
          columns=None, # 默认保存所有列
          header=True, # 默认保存列索引
          index=True) #  默认保存行索引

读取

pd.read_csv()读取CSV文件。有6个常用的参数。

pd.read_csv(filepath_or_buffer="filename.csv", # 文件读取路径
            
            header="infer", # 默认第1列是列索引
            names=None, # 用于自定义列索引,不自定义列名
            
            nrows=None, # 用于选择读取前X行,默认读取所有行
            usecols=None, # 可以用于选择读取特定的列,默认读取所有列
            
            index_col=None, # 用于指定某列的元素作为行索引,默认自动生成行索引
            skiprows=None )# 用于选择跳过开头的X行,默认不跳过

例子

下面7个例子详细介绍了CSV文件保存和读取文件的方法,可以点击链接在页面内跳转,哪里忘了点哪里。放心,每个例子都很简短。

如果你需要自己跑一下代码,建议用JupyterNote Book来跑,然后需要先阅读并执行简单创建一个DataFrame部分的代码,这部分代码提供了一个范例,帮助理解例子中参数的使用。

也可以从头到尾看完9个例子,下文的例子都是连贯的。

  • 例1:最简单的CSV文件存取方法
  • 例2:解决因为“最简单的CSV文件存取方法”导致的重复生成索引问题
  • 例3:to_csv()常用参数使用方法举例
  • 例4:read_csv()参数header,names的用法
  • 例5:read_csv()参数nrows,usecols的用法
  • 例6:read_csv()参数index_col的用法
  • 例7:参数skiprows的用法

学会了csv文件的存取,就等于学会了Excel文件的存取,Excel与CSV文件存取方式上有微小的区别,区别具体见

  • 例8:Excel文件保存
  • 例9:Excel文件读取

简单创建一个DataFrame

先简单创建一个DataFrame用作范例介绍CSV文件和Excel文件的保存,然后再读取刚刚保存的文件作为演示。

import pandas as pd
# 用字典创建一个DataFrame,key是列名,value是一列的值
students = {'name': ["Lily","Amy","Jack","Alex"],
            'height': [168.7, 172.3, 175.4, 182.1],
            'weight': [51.5, 49.8, 63.2, 81.5]}
df = pd.DataFrame(students)

创建好后df的内容应该是下面这样的,如果不指定行索引,pandas会自动帮你生成一个从0开始的行索引。这里说明一下行索引列索引的概念:

  • 行索引就是下面最左边这一列从0开始的数字
  • 列索引就是列名,是最顶部的一组字符[name, height, weight]
	name	height	weight
0	Lily	168.7	51.5
1	Amy		172.3	49.8
2	Jack	175.4	63.2
3	Alex	182.1	81.5

例1:最简单的CSV文件存取方法

回到例子列表

最简单的保存方法就是用DataFrame.to_csv()只填上文件名参数来保存。

但这里有个问题

保存的时候会默认保存索引,读取的时候会自动生成索引所以当你用pd.read_csv()读取文件的时候会出现索引重复的问题。

df.to_csv("students.csv")
df2 = pd.read_csv("students.csv")
df2

保存后students.csv的内容:

,name,height,weight
0,Lily,168.7,51.5
1,Amy,172.3,49.8
2,Jack,175.4,63.2
3,Alex,182.1,81.5

读取students.csvdf2的内容:

	Unnamed: 0	name	height	weight
0	0			Lily	168.7	51.5
1	1			Amy		172.3	49.8
2	2			Jack	175.4	63.2
3	3			Alex	182.1	81.5

可以看到,多出来了一列Unnamed:0,有两个方法可以解决重复索引问题。

例2:解决因为“最简单的CSV文件存取方法”导致的重复生成索引问题

回到例子列表

一是不保存索引

df.to_csv("students.csv", index=None)
df2 = pd.read_csv("students.csv")

二是读取的时候指定索引列

df.to_csv("students.csv")
df2 = pd.read_csv("students.csv", index_col=0)

用这两种方法读取后df2的内容都是:

	name	height	weight
0	Lily	168.7	51.5
1	Amy		172.3	49.8
2	Jack	175.4	63.2
3	Alex	182.1	81.5

方法2保存的文件内容跟之前的一样。

方法1保存的文件内容变成下面这样了。

name,height,weight
Lily,168.7,51.5
Amy,172.3,49.8
Jack,175.4,63.2
Alex,182.1,81.5

个人推荐使用方法1避免重复生成行索引的问题。下面的例子还会用到students.csv这个文件,且是用方法1保存的,文件内容如上。

如果只是简单学习下怎么用DataFrame.to_csv()pd.read_csv()存取文件,到这步就差不多可以了。下面会再拓展一点关于CSV存取文件的一些常用参数。

to_csv()常用参数

先回顾DataFrame.to_csv()常用参数的默认值。

df.to_csv(path_or_buf , # 保存文件的路径
          columns=None, # 默认保存所有列
          header=True, # 默认保存列索引
          index=True) #  默认保存行索引

例3:to_csv()常用参数使用方法举例

回到例子列表

下面跟上述参数的默认值反着干。

保存一个只有名字和体重没有行索引和列索引的CSV文件。

df.to_csv("students.csv" , # 保存文件的路径
          columns=["name","weight"], # 只保存名字和体重列
          header=False, # 不保存列索引
          index=False) #  不保存行索引
df2 = pd.read_csv("students2.csv")
df2

students2.csv的内容:

Lily,51.5
Amy,49.8
Jack,63.2
Alex,81.5

读取students2.csvdf2的内容:

	Lily	51.5
0	Amy		49.8
1	Jack	63.2
2	Alex	81.5

这里又发现了一个问题,因为pandaspd.read_csv()读取文件时会自动把第一列作为列索引,所以如果不保存列索引的话,读取的时候第一列数据就会变成列索引了。

但有的时候我们得到的数据就是没有列索引的。这时候的解决方法是:读取数据文件的时候不以第一行作为列索引。

df2 = pd.read_csv("students2.csv",header=None) # 不以第一行作为列索引
df2

读取students2.csvdf2的内容:

	0		1
0	Lily	51.5
1	Amy		49.8
2	Jack	63.2
3	Alex	81.5

pandas自动给数据生成了一个从0开始的列索引。可能有同学想自己给这些列索引命名,那就继续看pd.read_csv()的常用参数拓展吧~

read_csv()的常用参数

惯例总体看下pd.read_csv()常用参数的默认值。

import pandas as pd
pd.read_csv(filepath_or_buffer, # 文件读取路径
            
            header="infer", # 默认第一列是列索引
            names=None, # 不自定义列名
            
            nrows=None, # 用于指定行索引是哪列,默认自动生成行索引
            usecols=None, # 默认读取所有列
            
            index_col=None, # 默认读取所有行
            skiprows=None )# 默认不跳过开头的行

由于参数略多,我就分开介绍例子了。接下来展示的例子会用到之前保存的students.csvstudents2.csv文件,不记得文件内容的话可以回到前面看看。

例4:read_csv()参数header,names的用法

回到例子列表

  • header 用来选择哪一行作为列索引,可以填一个整数,填0表示第1行作为列索引,填5表示第6行作为列索引。填None表示默认不选任何行做为列索引,而是自动生成一个从0开始的列索引。
  • names 当不选header=None是,可以通过设置这个参数来自定义列索引。

利用刚才保存的students2.csv文件,读取并自定义列索引。

df2 = pd.read_csv("students2.csv",
                  header=None, # 默认不读取列索引
                  names=["姓名","体重"]) # 给这两列自定义列索引
df2

读取students2.csvdf2的内容:

	姓名	  体重
0	Lily	51.5
1	Amy		49.8
2	Jack	63.2
3	Alex	81.5

例5:read_csv()参数nrows,usecols的用法

回到例子列表

  • nrows 可以设置读取行数的数量,有时候不想读取所有数据,只是想读个几行看看数据长啥样就可以用这个参数。
  • usecols可以选择读取哪几列,有时候你数据文件有几万列,但你可能只需要用某几列就够了,就可以用这个参数。

读取students.csv文件,只读取身高和体重列,且只读取前2行的数据。

df2 = pd.read_csv("students.csv",
                  usecols=["height","weight"], # 只读身高和体重列
                  nrows=2) # 只读取前两行的数据       
df2

读取students.csvdf2的内容:

	height	weight
0	168.7	51.5
1	172.3	49.8

例6:read_csv()参数index_col的用法

回到例子列表

  • index_col 这个参数可以指定某一列作为数据的行索引

读取students.csv文件,以name的数据作为行索引。

df2 = pd.read_csv("students.csv",
                  index_col="name")     
df2

读取students.csvdf2的内容:

name	height	weight		
Lily	168.7	51.5
Amy		172.3	49.8
Jack	175.4	63.2
Alex	182.1	81.5

但有时候CSV文件可能没有列索引,比如students2.csv这时候也可以用数字作为参数选择作为行索引的列。以第一列作为行索引。注意要加上header=None避免第一行数据被作为列索引。

df2 = pd.read_csv("students2.csv",
                  header=None, # 避免第一行数据被作为列索引
                  index_col=0)     
df2

读取students2.csvdf2的内容:

0		1
Lily	51.5
Amy		49.8
Jack	63.2
Alex	81.5

例7:参数skiprows的用法

回到例子列表

  • skiprow 是用来跳过CSV文件开头几行的,一般用在一些不太标准的文件上,比如有些文件开头几行是数据的介绍,数据集的名称之类的。之后几行才是CSV数据格式的内容。比如:
introduction: this is a students list.
creater:Light2077
name,height,weight
Lily,168.7,51.5
Amy,172.3,49.8
Jack,175.4,63.2
Alex,182.1,81.5

读取这样的文件时,你可以手动删除这开头多余的两行,但是如果你在读取成千上万个这样的文件时,手动能把你累死。。最好的方法还是用pd.read_csv("filename",skiprows=2)

有时不需要读取列索引时,skiprows也可以用来跳过列索引

读取students.csv文件,跳过第一行。

df2 = pd.read_csv("students.csv",
                  skiprows=1)     
df2

读取students.csvdf2的内容:

	Lily	168.7	51.5
0	Amy		172.3	49.8
1	Jack	175.4	63.2
2	Alex	182.1	81.5

跳过了列索引,但pandas会默认以跳过的行之后的下一行数据作为列索引。

Excel文件保存和读取

其实学会了csv文件的存取,就几乎等于学会了Excel文件的存取,只不过Excel有工作表(sheet)这个概念,一个Excel文件可能会有多个工作表,需要分别读取和保存不同的工作表。

这里的例子还是使用一开始创建的DataFrame

DataFrame.to_excel(PATH, sheet_name=’’)

pd.read_excel(PATH, sheet_name=’’)

例8:Excel文件保存

回到例子列表

import pandas as pd
# 用字典创建一个DataFrame,key是列名,value是一列的值
students = {'name': ["Lily","Amy","Jack","Alex"],
            'height': [168.7, 172.3, 175.4, 182.1],
            'weight': [51.5, 49.8, 63.2, 81.5]}
df = pd.DataFrame(students)

excel文件保存,将df保存在students3.xlsx里:

df.to_excel("students3.xlsx")

students3.xlsx文件里的内容

	name	height	weight
0	Lily	168.7	51.5
1	Amy		172.3	49.8
2	Jack	175.4	63.2
3	Alex	182.1	81.5

然后利用之前所学的知识展示,把df拆分保存到students4.xlsx里,其中:

  • 学生的姓名保存在sheet1
  • 身高和体重保存在sheet2
with pd.ExcelWriter("students4.xlsx") as writer: 
    df.to_excel(writer, sheet_name='sheet1', columns=["name"])
    df.to_excel(writer, sheet_name='sheet2', columns=["height", "weight"])

students4.xlsxsheet1里的内容

	name
0	Lily
1	Amy
2	Jack
3	Alex

students4.xlsxsheet2里的内容

	height	weight
0	168.7	51.5
1	172.3	49.8
2	175.4	63.2
3	182.1	81.5

例9:Excel文件读取

回到例子列表

读取的时候如果不指定sheet_name,默认读取第一个工作表的内容。

excel与csv文件读取的方式几乎相同,就不做多介绍了。

这里展示一个读取students4.xlsx工作表sheet2,指定第一列为行索引且只读取前两行数据的例子:

df2 = pd.read_excel("students4.xlsx", sheet_name="sheet2",index_col=0, ncols=2)
df2

df2的内容为:

	height	weight
0	168.7	51.5
1	172.3	49.8

保存的students4.xlsxsheet2里的内容

	height	weight
0	168.7	51.5
1	172.3	49.8
2	175.4	63.2
3	182.1	81.5

你可能感兴趣的:(pandas数据存储读取read_csv(), to_csv(),read_excel(), to_excel()(常用方法,例子丰富))