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 文件时设置列名称