2017-02-13 73 views
1

我收到一个CSV文件,其中,是用于分隔字段的分隔符,但不幸的是附加的符号表示小数点(德文符号)。熊猫读取格式不正确的CSV

因此,某些行的列数将不同。奇怪的是,Excel会解析/读取文件。是否有可能在熊猫中读取这些文件?到目前为止,我只得到了类似的东西来

Error tokenizing data. C error: Expected 97 fields in line 3, saw 98 

编辑

下面是一个小例子:

pd.read_csv(os.path.expanduser('~/Downloads/foo.csv'), sep=',', decimal=',') 

~/Downloads/foo.csv文件与

first, number, third 
some, 1, other 
foo, 1.5, bar 
baz, 1,5, some 

当我加载内容数据在R

See spec(...) for full column specifications. 
Warnung: 1538 parsing failures. 
row col expected  actual 
    1 -- 93 columns 97 columns 
    2 -- 93 columns 98 columns 
    3 -- 93 columns 97 columns 
    4 -- 93 columns 102 columns 
    5 -- 93 columns 99 columns 

熊猫有这样的宽容模式吗?

+3

你能发布一个可重现的样本数据集吗? – MaxU

+0

完成。请参阅编辑。 –

+0

这是数据的准确表示,因为每行只有一个可能受到影响的列? – DSM

回答

2

确保您的文件中没有应声明为read_csv的引号分隔符。

如果文件格式不正确,那么在数学上就没有确定性算法,它可以决定一个连续的逗号是两个字段还是一个逗号分隔的字符。

您将不得不编写一个预处理程序,通过临时算法来清理不合格的数据,以接近您的文件实际。这可能是讨厌的,如我假设数字后跟逗号后跟3个数字实际上是相同的字段和这些修复的任何其他变化。

你也可以面对即使不是确定性的情况,你也没有办法,只能去数据源,并要求另一种文件格式的数据修复。

要删除的错误路线和加载其他的人,从文档,这些参数将帮助:

error_bad_lines:布尔,默认有太多的领域 (真行如用逗号过多一个CSV行)将默认导致 异常被引发,并且不会返回DataFrame。如果为False,则返回 ,然后这些“坏线”将从返回的 的DataFrame中删除。

warn_bad_lines(仅使用C解析器有效):布尔值,默认 True如果error_bad_lines是假,而warn_bad_lines是真,一个 警告每个“坏线”将被输出。 (仅在C 解析器中有效)。

+0

不幸的是,这听起来像一个答案。 –

+1

@GeorgHeiler相信我在这个领域的卑微经验,不仅听起来像这样,但你的思想不会接受一段时间,没有其他选择:-)。如果你更多地思考,你会发现解决这个问题一般是一致的,就是违反停止问题。 – Boud

+0

我可否要求额外查找(请参阅我的上次编辑)与R相似的许可模式,它只会发出警告,但仍会加载部分数据? –