带有错误标头分隔符的熊猫read_csv

时间:2019-09-26 21:09:20

标签: python pandas

我有一个csv文件,例如test.csv,看起来像这样

Data 1 | Data 2 | Data 3 |
1      | 2      | 3      |      |      |    6

如果我用记事本++或文本打开csv,它会显示如下

Data 1, Data 2, Data 3
1,2,3,,,6

instead of

Data 1, Data 2, Data 3, ,,
1,2,3,,,6

使用pandas.read_csv时出现错误,因为我的行中的列多于标题行中声明的列。有没有办法找到整个CSV的最大列数?

1 个答案:

答案 0 :(得分:0)

我的建议是:

  • 跳过标题行,
  • 指定您自己的列名列表。

因此代码应为:

df = pd.read_csv(io.StringIO(txt), skiprows=1,
    names=['Data 1', 'Data 2', 'Data 3', 'Data 4', 'Data 5', 'Data 6'])

要考虑的一个细节是如何表示空白单元格。

read_csv 的默认行为是将其视为 NaN ,但是 不利的一面是,此类列被强制为 float

另一种可能性是传递na_filter=False参数,然后:

  • 此类空字符串以“原样”(作为空字符串)表示,
  • 但是具有这些值的列这次被强制为 object , 因为 string 细胞与 int 混合在一起。

还请注意,标题行的格式又被破坏了 详情。问题的根源是逗号后的空格: 它们成为下一列名称的开头。

因此,即使只有3列数据,列名称也将是:

['Data 1', ' Data 2', ' Data 3']

(请注意前导空格)。因此,这是跳过 标题行。