pandas数据存储读取read

您所在的位置:网站首页 文件的什么函数用来读取文件中所有的内容 pandas数据存储读取read

pandas数据存储读取read

2024-07-15 18:04| 来源: 网络整理| 查看: 265

方法精简例子丰富

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

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

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

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.csv后df2的内容:

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.csv后df2的内容:

Lily 51.5 0 Amy 49.8 1 Jack 63.2 2 Alex 81.5

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

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

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

读取students2.csv后df2的内容:

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.csv和students2.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.csv后df2的内容:

姓名 体重 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.csv后df2的内容:

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.csv后df2的内容:

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.csv后df2的内容:

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.csv后df2的内容:

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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3