本教程介绍了如何使用 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 包
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_name和company是字符变量。其余变量是数字变量。
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'])
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")
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。