第二章:25+ Python 数据操作教程(第四节使用 PANDAS 读取 CSV 文件的 15 种方法)

本教程介绍了如何使用 pandas 包的 read_csv 函数在 python 中读取 CSV 文件。如果不使用 read_csv 函数,用 python 面向对象编程导入 CSV 文件并不简单。Pandas 是一个非常强大的数据操作 python 包,支持各种函数从各种格式加载和导入数据。在这里,我们将介绍如何处理导入 CSV 文件时的常见问题。

目录

[示例 1:读取带有标题行的 CSV 文件]

[示例 2:读取标题在第二行的 CSV 文件]

[示例 3:跳过行但保留标题]

[示例 4:读取没有标题行的 CSV 文件]

[示例 5:指定缺失值]

[示例 6:设置索引列]

[示例 7:从外部 URL 读取 CSV 文件]

[示例 8:导入 CSV 时跳过最后 5 行]

[示例 9:只读取前 5 行]

[示例 10:将“,”解释为千位分隔符]

[示例 11:只读特定列]

[示例 12:读取一些行和列]

[示例 13:使用分号分隔符读取文件]

[示例 14:导入 CSV 时更改列类型]

[示例 15:测量导入大 CSV 文件所花费的时间]

[示例 16:如何在不使用 Pandas 包的情况下读取 CSV 文件]


安装和加载 Pandas 包
确保你的系统上已经安装了pandas 包。如果你使用 Anaconda 设置 python,它带有 pandas 包,所以你不需要再次安装它。否则,您可以使用命令安装它pip install pandas。下一步是通过运行以下命令来加载包。pd是熊猫包的别名。我们将使用它来代替全名“pandas”。
import pandas as pd
创建用于导入的示例数据
下面的程序创建了一个示例 pandas 数据框,可以进一步用于演示。
dt = {'ID': [11, 12, 13, 14, 15],
            'first_name': ['David', 'Jamie', 'Steve', 'Stevart', 'John'],
            'company': ['Aon', 'TCS', 'Google', 'RBS', '.'],
            'salary': [74, 76, 96, 71, 78]}
mydt = pd.DataFrame(dt, columns = ['ID', 'first_name', 'company', 'salary'])
示例数据如下所示 -
  ID first_name company  salary
0  11      David     Aon      74
1  12      Jamie     TCS      76
2  13      Steve  Google      96
3  14    Stevart     RBS      71
4  15       John       .      78
在工作目录中将数据保存为 CSV 格式
在保存数据文件之前检查工作目录。
import os
os.getcwd()
如果你想改变工作目录,你可以在os.chdir( )函数下指定它。单个反斜杠在 Python 中不起作用,因此在指定文件位置时使用 2 个反斜杠。
os.chdir("C:\\Users\\DELL\\Documents\\")
以下命令告诉 python 在您的工作目录中写入 CSV 格式的数据。
mydt.to_csv('workingfile.csv', index=False)

示例 1:读取带有标题行的 CSV 文件

这是 read_csv() 函数的基本语法。您只需要提及文件名。它假定您的 CSV 文件的第一行中有列名。
mydata = pd.read_csv("workingfile.csv")
它以它应该的方式存储数据,因为我们在数据文件的第一行中有标题。重要的是要强调这header=0是默认值。因此我们不需要提及header=参数。这意味着标题从第一行开始,因为 python 中的索引从0开始。上面的代码相当于这行代码。pd.read_csv("workingfile.csv", header=0)
导入后检查数据
mydata.shape
mydata.columns
mydata.dtypes
它返回 5 行数和 4 列数。列名是['ID', 'first_name', 'company', 'salary']

查看我们导入的数据的列类型。first_namecompany是字符变量。其余变量是数字变量。

ID             int64
first_name    object
company       object
salary         int64

示例 2:读取标题在第二行的 CSV 文件

假设您在第二行中有列名或变量名。要读取这种 CSV 文件,您可以提交以下命令。
mydata = pd.read_csv("workingfile.csv", header = 1)
header=1告诉 python 从第二行选择标题。它将第二行设置为标题。这不是一个现实的例子。我只是用它来说明,以便您了解如何解决它。为了使其实用,您可以在 CSV 文件的第一行添加随机值,然后再次导入。
   11    David     Aon  74
0  12    Jamie     TCS  76
1  13    Steve  Google  96
2  14  Stevart     RBS  71
3  15     John       .  78
定义您自己的列名而不是 CSV 文件中的标题行
mydata0 = pd.read_csv("workingfile.csv", skiprows=1, names=['CustID', 'Name', 'Companies', 'Income'])
skiprows = 1意味着我们忽略第一行并且names=选项用于手动分配变量名。
   CustID     Name Companies  Income
0      11    David       Aon      74
1      12    Jamie       TCS      76
2      13    Steve    Google      96
3      14  Stevart       RBS      71
4      15     John         .      78

示例 3:跳过行但保留标题

mydata = pd.read_csv("workingfile.csv", skiprows=[1,2])
在本例中,我们在导入时跳过了第二行第三行。不要忘记 python 中的索引从 0 开始,因此 0 指的是第一行,1 指的是第二行,2 表示第三行。
   ID first_name company  salary
0  13      Steve  Google      96
1  14    Stevart     RBS      71
2  15       John       .      78

除了[1,2],您还可以编写range(1,3). 两者意思相同,但是当您想跳过许多行时,range() 函数非常有用,因此它可以节省手动定义行位置的时间。

skiprows 选项的隐藏秘密

skiprows = 4时,表示从顶部跳过四行。skiprows=[1,2,3,4]表示从第二到第五跳过行。这是因为当在 skiprows= 选项中指定列表时,它会跳过索引位置的行。当在选项中指定单个整数值时,它会考虑从顶部跳过这些行

示例 4:读取没有标题行的 CSV 文件

如果您指定“header = None”, python 将分配一系列从 0 到(列数 - 1)的数字作为列名。在这个数据文件中,我们在第一行有列名。
mydata0 = pd.read_csv("workingfile.csv", header = None)
请参阅下面显示的输出 -
 
为列名添加前缀
mydata0 = pd.read_csv("workingfile.csv", header = None, prefix="var" )
在这种情况下,我们设置var为前缀,告诉 python 在每个列名之前包含此关键字。
 var0        var1     var2    var3
0   ID  first_name  company  salary
1   11       David      Aon      74
2   12       Jamie      TCS      76
3   13       Steve   Google      96
4   14     Stevart      RBS      71
5   15        John        .      78

示例 5:指定缺失值

这些na_values=选项用于在导入 CSV 文件时将某些值设置为空白/缺失值。
mydata00 = pd.read_csv("workingfile.csv", na_values=['.'] )
 var0        var1     var2    var3
0   ID  first_name  company  salary
1   11       David      Aon      74
2   12       Jamie      TCS      76
3   13       Steve   Google      96
4   14     Stevart      RBS      71
5   15        John        .      78
示例 6:设置索引列
mydata01 = pd.read_csv("workingfile.csv", index_col ='ID' )
   ID first_name company  salary
0  11      David     Aon      74
1  12      Jamie     TCS      76
2  13      Steve  Google      96
3  14    Stevart     RBS      71
4  15       John     NaN      78
正如您在上面的输出中看到的,列 ID 已被设置为索引列。

示例 7:从外部 URL 读取 CSV 文件

您可以直接从存储在 Web 链接上的 CSV 文件中读取数据。当你需要从 github、kaggle 和其他网站加载公开可用的数据集时,它非常方便。
mydata02 = pd.read_csv("http://winterolympicsmedals.com/medals.csv")
这个 DataFrame 包含 2311 行和 8 列。使用mydata02.shape,您可以生成此摘要。

示例 8:导入 CSV 时跳过最后 5 行

mydata04 = pd.read_csv("http://winterolympicsmedals.com/medals.csv", skip_footer=5)
在上面的代码中,我们使用skip_footer=参数排除了底部的 5 行。

示例 9:只读取前 5 行

mydata05 = pd.read_csv("http://winterolympicsmedals.com/medals.csv", nrows=5)
使用nrows=选项,您可以加载前 K 行数。

示例 10:将“,”解释为千位分隔符

mydata06 = pd.read_csv("http://winterolympicsmedals.com/medals.csv", thousands=",")

示例 11:只读特定列

mydata07 = pd.read_csv("http://winterolympicsmedals.com/medals.csv", usecols=[1,5,7])
上面的代码只读取基于索引位置的列,即第二、第六和第八位置。

示例 12:读取一些行和列

mydata08 = pd.read_csv("http://winterolympicsmedals.com/medals.csv", usecols=[1,5,7], nrows=5)
在上面的命令中,我们组合了 usecols= 和 nrows= 选项。它只会选择前 5 行和选定的列。

示例 13:使用分号分隔符读取文件

mydata09 = pd.read_csv("file_path", sep = ';' )
在 read_csv( ) 函数中使用sep=参数,您可以使用默认逗号以外的任何分隔符导入文件。在这种情况下,我们使用分号作为分隔符。

示例 14:导入 CSV 时更改列类型

假设您想在将 CSV 文件加载到 Python 中时将列格式从 int64 更改为 float64。我们可以使用dtype =选项。
mydf = pd.read_csv("workingfile.csv", dtype = {"salary" : "float64"})

示例 15:测量导入大 CSV 文件所花费的时间

通过使用verbose=True,您可以捕获标记化、转换和解析器内存清理所花费的时间。
mydf = pd.read_csv("workingfile.csv", verbose=True)

示例 16:如何在不使用 Pandas 包的情况下读取 CSV 文件

要使用纯 python 方式导入 CSV 文件,您可以提交以下命令:
import csv
with open("C:/Users/DELL/Downloads/nycflights.csv") as f:
  d = DictReader(f)
  l=list(d)
您还可以从 URL 或外部网页下载和加载 CSV 文件。
import csv
import requests

response = requests.get('https://dyurovsky.github.io/psyc201/data/lab2/nycflights.csv').text
lines = response.splitlines()
d = csv.DictReader(lines)
l = list(d)
尾注
完成本教程后,我希望您有信心使用清理和管理文件的方法将 CSV 文件导入 Python。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值