Pandas:导入每行不同列数的 csv


当每行的列数不同时,您可以使用以下基本语法将 CSV 文件导入 pandas:

 df = pd. read_csv (' uneven_data.csv ', header= None , names=range( 4 ))

range()函数内的值应该是具有最大列数的行中的列数。

以下示例展示了如何在实践中使用此语法。

示例:将 CSV 导入 Pandas,每行具有不同的列数

假设我们有以下 CSV 文件,名为irreventure_data.csv

请注意,每行的列数不同。

如果我们尝试使用read_csv()函数将此 CSV 文件导入到 pandas DataFrame 中,我们将收到错误:

 import pandas as pd

#attempt to import CSV file with differing number of columns per row
df = pd. read_csv (' uneven_data.csv ', header= None )

ParserError: Error tokenizing data. C error: Expected 2 fields in line 2, saw 4

我们收到一个ParserError ,它告诉我们 pandas 期望有2 个字段(因为这是第一行中的列数),但它看到了4

此错误告诉我们给定行中的最大列数是4

因此,我们可以导入 CSV 文件并为名称参数提供range(4)值:

 import pandas as pd

#import CSV file with differing number of columns per row
df = pd. read_csv (' uneven_data.csv ', header= None , names=range( 4 )))

#view DataFrame
print (df)

   0 1 2 3
0 to 22 NaN NaN
1 B 16 10.0 12.0
2 C 25 10.0 NaN
3 D 14 2.0 7.0
4 E 20 4.0 NaN

请注意,我们能够成功地将 CSV 文件导入 pandas DataFrame,没有任何错误,因为我们明确告诉 pandas 需要 4 列。

默认情况下,pandas 用 NaN 填充每行中的所有缺失值。

如果希望缺失值显示为零,可以使用fillna()函数,如下所示:

 #fill NaN values with zeros
df_new = df. fillna ( 0 )

#view new DataFrame
print (df_new)

   0 1 2 3
0 to 22 0.0 0.0
1 B 16 10.0 12.0
2 C 25 10.0 0.0
3 D 14 2.0 7.0
4 E 20 4.0 0.0

DataFrame 中的每个 NaN 值现已替换为零。

注意:您可以在此处找到 pandas read_csv()函数的完整文档。

其他资源

以下教程解释了如何在 Python 中执行其他常见任务:

Pandas:如何在读取 CSV 文件时跳行
Pandas:如何将数据添加到现有 CSV 文件
Pandas:导入 CSV 文件时如何指定类型
Pandas:导入 CSV 文件时设置列名称

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注