用Pandas在Python中读写CSV文件
这篇文章展示了如何使用Python的Pandas库来读写CSV文件。要读取一个CSV文件,需要使用Pandas库的read_csv()方法。
Python
pandas
读写CSV文件
Python读写CSV
Pandas读写CSV
发表日期:2023-01-08
虽然你可以在
Python
中使用内置的
open()
函数来读写CSV文件,或者使用专门的
csv
模块,你也可以使用
Pandas
。
在这篇文章中,你将看到如何使用Python的
Pandas库
来读写CSV文件。
s
a
n
g
ni
a
o
.
c
o
m
什么是CSV文件?
让我们快速回顾一下什么是
CSV文件
- 只不过是一个简单的文本文件,遵循一些格式化惯例。然而,它是存储表格数据的最常见、最简单、最容易的方法。这种格式通过遵循特定的结构将表格分为行和列来排列。正是这些行和列包含了你的数据。
每一行都有一个新的行终止,以开始下一行。同样一个分隔符,通常是一个逗号,将每一行的列分开。
例如,我们可能有一个看起来像这样的表格:
State
Capital
Population
City,State,Capital,Population
Philadelphia,Pennsylvania,No,1.581 Million
Sacramento,California,Yes,0.5 Million
New York,New York,No,8.623 Million
Austin,Texas,Yes,0.95 Million
Miami,Florida,No,0.463 Million
虽然名字(逗号分隔值)本身使用逗号作为分隔符,但你也可以使用其他分隔符(分离器),如分号(
;
)。表格的每一行都是CSV文件的一个新行,它是表示表格数据的一种非常紧凑和简洁的方式。
现在,让我们看一下
read_csv()
函数。
使用Pandas读取和写入CSV文件
Pandas是一个非常强大和流行的数据分析和操作的框架。Pandas最引人注目的特点之一是它能够读写各种类型的文件,包括CSV和Excel。你可以使用
read_csv()
和
to_csv()
等函数在Pandas中有效而轻松地操作CSV文件。
https://www.sangnia
o
.com/
安装Pandas
在使用Pandas之前,我们必须先安装它。让我们使用
pip
:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
另外,你也可以从在线资源中读取CSV文件,比如GitHub,只需将资源的URL传递给
read_csv()
函数即可。让我们从GitHub仓库中读取同样的CSV文件,不要先下载到我们的本地机器上:
import pandas as pd
titanic_data = pd.read_csv(r'https://raw.githubusercontent.com/datasciencedojo/datasets/master/titanic.csv')
print(titanic_data.head())
这也导致了:
PassengerId Survived Pclass ... Fare Cabin Embarked
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
[5 rows x 12 columns]
默认情况下,
read_csv()
方法使用CSV文件的第一行作为列标题。有时,这些标题可能有奇怪的名字,你可能想使用自己的标题。你可以在读取文件后设置列头,只需给
DataFrame
实例的
columns
字段分配另一个列表,或者你可以在读取CSV文件时首先设置列头。
让我们定义一个列名列表,并使用这些名字来代替CSV文件中的名字:
Id Survived Passenger Class ... Price Cabin Station
0 PassengerId Survived Pclass ... Fare Cabin Embarked
1 1 0 3 ... 7.25 NaN S
2 2 1 1 ... 71.2833 C85 C
3 3 1 3 ... 7.925 NaN S
4 4 1 1 ... 53.1 C123 S
嗯,现在我们已经有了我们的自定义标题,但是CSV文件的_第一行,也就是原来用来设置列名的那一行也包含在
DataFrame
中。我们想跳过这一行,因为它对我们不再有任何价值。
读取CSV时跳过行数
让我们通过使用
skiprows
参数来解决这个问题:
'Station']
titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names, skiprows=[0])
print(titanic_data.head())
现在,让我们运行这段代码:
Id Survived Passenger Class ... Price Cabin Station
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 4 1 1 ... 53.1000 C123 S
4 5 0 3 ... 8.0500 NaN S
运作得很好!
skiprows
参数接受一个你想跳过的行的列表。你也可以跳过,例如
0,4,7
,如果你愿意的话:
titanic_data = pd.read_csv(r'E:\Datasets\titanic.csv', names=col_names, skiprows=[0, 4, 7])
print(titanic_data.head(10))
这将导致
DataFrame
没有我们之前看到的一些行:
Id Survived Passenger Class ... Price Cabin Station
0 1 0 3 ... 7.2500 NaN S
1 2 1 1 ... 71.2833 C85 C
2 3 1 3 ... 7.9250 NaN S
3 5 0 3 ... 8.0500 NaN S
4 6 0 3 ... 8.4583 NaN Q
5 8 0 3 ... 21.0750 NaN S
6 9 1 3 ... 11.1333 NaN S
7 10 1 2 ... 30.0708 NaN C
8 11 1 3 ... 16.7000 G6 S
9 12 1 1 ... 26.5500 C103 S
请记住,跳过的行发生在
DataFrame
完全形成之前,所以你不会错过
DataFrame
本身的任何索引,尽管在这种情况下,你可以看到
Id
字段(从CSV文件导入)缺少ID
4
和
7
。
https://www.sangnia
o
.com/
你也可以决定完全删除标题,这将导致一个
DataFrame
只有
0...n
个标题列,通过设置
header
参数为
None
:
0 1 2 3 4 ... 7 8 9
0 1 0 3 Braund, Mr. Owen Harris male ... 0 A/5 21171 7.2500
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female ... 0 PC 17599 71.2833
2 3 1 3 Heikkinen, Miss. Laina female ... 0 STON/O2. 3101282 7.9250
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female ... 0 113803 53.1000
4 5 0 3 Allen, Mr. William Henry male ... 0 373450 8.0500
指定定界符
如前所述,你最终可能会遇到一个CSV文件,它实际上并没有使用逗号来分隔数据。在这种情况下,你可以使用
sep
参数来指定其他定界符:
用
to_csv()
写CSV文件
同样
DataFrame
是表格式的。将
DataFrame
变成CSV文件就像将CSV文件变成
DataFrame
一样简单 - 我们在
DataFrame
实例上调用
write_csv()
函数。
https://www.sangnia
o
.com/
当把
DataFrame
写入CSV文件时,你也可以使用
columns
参数来改变列名,或者通过
sep
参数指定分隔符。如果你不指定这两个参数,你最终会得到一个标准的逗号分隔值文件。
让我们来玩玩这个:
import pandas as pd
cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State'])
cities.to_csv('cities.csv')
在这里,我们做了一个简单的
DataFrame
,包含两个城市和它们各自的州。然后,我们使用
to_csv()
并提供文件名,将数据保存到一个CSV文件中。
这将导致在你正在运行的脚本的工作目录中产生一个新的文件,其中包括:
import pandas as pd
cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State'])
cities.to_csv('cities.csv', index=False)
现在,这导致了一个文件,其中包含:
import pandas as pd
cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State'])
new_column_names = ['City_Name', 'State_Name']
cities.to_csv('cities.csv', index=False, header=new_column_names)
我们做了一个
new_header
列表,包含了不同的列值。然后,使用
header
参数,我们设置了这些,而不是原来的列名。这就产生了一个
cities.csv
,其内容如下:
import pandas as pd
cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida']], columns=['City', 'State'])
cities.to_csv('cities.csv', index=False, sep=';')
这将产生一个
cities.csv
文件,其中包括:
import pandas as pd
cities = pd.DataFrame([['Sacramento', 'California'], ['Miami', 'Florida'], ['Washington DC', pd.NA]], columns=['City', 'State'])
cities.to_csv('cities.csv', index=False, na_rep='Unknown')
这里,我们有两个有效的城市 - 州对,但是
Washington DC
缺少它的州。如果我们运行这段代码,将产生一个
cities.csv
,内容如下:
这篇文章展示了如何使用
Python
的
Pandas
库来读写
CSV文件
。要读取一个CSV文件,需要使用Pandas库的
read_csv()
方法。在读取CSV文件时,你也可以通过
read_csv()
方法的
names
属性传递自定义的头文件名。最后,要使用Pandas写一个CSV文件,你首先要创建一个Pandas DataFrame对象,然后在DataFrame上调用
to_csv
方法。
版权声明:本文为桑鸟网博主「波靖仔」的原创文章,转载请附上原文出处链接及本声明。
本文标题:用Pandas在Python中读写CSV文件
本文地址:https://news.sangniao.com/p/2388353129