尾随分隔符使熊猫 read_csv 感到困惑

Posted

技术标签:

【中文标题】尾随分隔符使熊猫 read_csv 感到困惑【英文标题】:Trailing delimiter confuses pandas read_csv 【发布时间】:2012-11-23 02:02:12 【问题描述】:

一个 csv(逗号分隔)文件,其中行有一个额外的尾随分隔符,似乎混淆了pandas.read_csv。 (数据文件为[1])

它将额外的分隔符视为额外的列。所以比标题要求的多一列。然后pandas.read_csv 将第一列作为行标签。总体效果是列和标题不再对齐 - 第一列成为行标签,第二列由第一个标题命名,等等。

这很烦人。知道如何告诉pandas.read_csv 做正确的事吗?我找不到。

好书,顺便说一句。


[1]: 2012 FEC Election Database 来自 Python for Data Analysis 一书的第 9 章

【问题讨论】:

【参考方案1】:

对于所有仍在寻找此内容的人。韦斯为此写了一封blogpost。如果行中的一个值过多,则将其视为行名称。

可以通过将index_col=False 设置为read_csv 的选项来更改此行为。

【讨论】:

【参考方案2】:

我创建了一个 GitHub 问题来看看自动处理这个问题:

https://github.com/pydata/pandas/issues/2442

我认为 FEC 文件格式发生了轻微变化,导致了这个烦人的问题——如果你使用这里发布的 http://github.com/pydata/pydata-book ,你希望不会有这个问题。

【讨论】:

很高兴知道这本书有一个 github 存储库。谢谢,韦斯。 我只是想知道这个问题发生在其他地方;我刚刚从 NOAA 气候网站下载了一些天气数据,每个 CSV 文件的末尾都有一个额外的逗号。我想出了上面列出的相同解决方法。这很烦人,我花了一段时间才弄清楚为什么 read_csv() 不起作用。【参考方案3】:

嗯,有一个非常简单的解决方法。在读取 csv 文件时在标题中添加一个虚拟列:

cols = ...
cols.append('')
records = pandas.read_csv('filename.txt', skiprows=1, names=cols)

然后列和标题再次对齐。

【讨论】:

以上是关于尾随分隔符使熊猫 read_csv 感到困惑的主要内容,如果未能解决你的问题,请参考以下文章

对于不规则的分隔符,如何使 pandas read_csv 中的分隔符更灵活 wrt 空格?

如何在熊猫中读取带有分号分隔符的文件

pandas.read_csv 不在分号分隔符处对数据进行分区

如何在熊猫中读取具有空格分隔值的文件

导入包含逗号、千位分隔符和尾随减号的 CSV 数据

NSNumberFormatter 千位分隔符和尾随零