大熊猫阅读格式错误的CSV

时间:2017-02-13 22:00:25

标签: python csv pandas separator malformed

我收到了一个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 

熊猫中有这种宽容模式吗?

1 个答案:

答案 0 :(得分:2)

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

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

您必须编写一个预处理器,使用临时算法来处理格式错误的数据,接近您文件的实际情况。这可能是令人讨厌的像我采用假设数字后跟逗号后跟3位数实际上是相同的字段以及这些修正的任何其他变体。

您还可能遇到即使这样也不具有确定性的情况,那么您无法转到数据源并要求其他文件格式进行数据修复。

要删除错误的行并加载其他行,文档中的这些参数将有所帮助:

  

error_bad_lines:boolean,default True包含太多字段的行   (例如,逗号太多的csv行)默认会导致   要引发的异常,并且不会返回任何DataFrame。如果为假,   然后这些“坏线”将从DataFrame中删除   回。 (仅对C解析器有效)

     

warn_bad_lines:布尔值,默认值   如果error_bad_lines为False,并且warn_bad_lines为True,则为true   将输出每个“坏线”的警告。 (仅对C有效   解析器)。