python-2.7 - 使用 read_csv 时的额外逗号导致数据框中的 "s 过多

标签 python-2.7 csv pandas delimiter

我正在尝试使用 pandas read_csv 读取一个大文件 (~8Gb)。在数据的其中一列中,有时会有一个包含逗号但用大括号括起来的列表,例如

"label1","label2","label3","label4","label5"

"{A1}","2","","假","{ "苹果": 假, "梨": 假, "香蕉": 空}

因此,当读入这些特定行时,我收到错误“错误标记数据。C 错误:第 35 行中的预期 37 个字段,看到 42”。我找到了 this说要添加的解决方案 sep=",(?![^{]*})"到 read_csv 参数中,这些参数可以正确拆分数据。但是,数据现在包括每个条目周围的引号(在我添加 sep 参数之前这并没有发生)。

数据现在看起来像这样:

“label1”“label2”“label3”“label4”“label5”

“{A1}”“2”“”“假”“{“苹果”:假,“梨”:假,“香蕉”:空}”

这意味着我不能对数字数据使用例如 .describe() 等,因为它们仍然是字符串。

有谁知道在没有引号的情况下读取数据但仍将数据拆分到原处的方法吗?

Python 的新手,如果有明显的解决方案,我们深表歉意。

serialdev找到了删除 "s 的解决方案,但数据列是对象,而不是我期望/想要的,例如,整数值不被视为整数。

数据需要在“,”处明确拆分(包括“s”),有没有办法在 read_csv 参数中说明这一点?

谢谢!

最佳答案

读取您指定的数据结构,其中最后一个元素的长度未知。

"{A1}","2","","假","{ "苹果": 假, "梨": 假, "香蕉": 空}"

"{A1}","2","","False","{ "apple": false, "pear": false, "banana": null, "orange": "true"}"

使用否定的前瞻断言将分隔符更改为正则表达式。这将使您能够仅在没有紧跟空格时使用“,”分隔。

df = pd.read_csv('my_file.csv', sep='[,](?!\s)', engine='python', thousands='"')

print df

        0  1   2        3                                                  4
0  "{A1}"  2 NaN  "False"  "{ "apple" : false, "pear" : false, "banana" :...
1  "{A1}"  2 NaN  "False"  "{ "apple" : false, "pear" : false, "banana" :...

将千位分隔符指定为引号是一种将包含带引号的整数的字段解析为正确数据类型的怪异方法。您可以使用转换器实现相同的结果,如果您需要,转换器还可以从字符串中删除引号,并将“True”或“False”转换为 bool 值。

关于python-2.7 - 使用 read_csv 时的额外逗号导致数据框中的 "s 过多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715535/

相关文章:

python - 如何使用python通过gmail发送电子邮件?

Python:如何一次将多个键传递给字典

python - Pandas 数据框按多行分组

python - 需要将列表中的十六进制值视为 int 才能使用 bin() 进行计算。我缺少什么?

python - 异常值: cannot import name TimeoutStateError when import Geocoder

java - 是否有 CSV 扫描未找到任何行 in.nextLine();

php - 想要从命令行创建 cron 作业

Python 3.4 - Pandas - 帮助正确排列数据框列和删除无效列

python - 如何在 python pandas 中使用 json_normalize 解压多个级别?

Python unittest mock ...模拟一个模块语句