使用Pandas读取带有Json列的CSV文件



我有一个包含几个JSON列的CSV文件,我正在使用python panda阅读它。示例文件数据如下所示:

12345,67890,{"key1":"value1","key2":"value2","key3":"value3"},abcdefgh,{"key4":"value4"}
12345,67890,NONE,abcdefgh,{"key4":"value4"}

在读取CSV时,我使用,作为分隔符,但这会导致问题,因为JSON数据也包含,,最终行没有正确分隔。

pd.read_csv('s3://bucket-name/file.csv', sep=",")

我还尝试了另一个正则表达式[a-zA-Z0-9],|[}],作为分隔符,但这从列数据中删除了最后一个字符(,之前的1个字符)。

如果我们不接受json元素后面的逗号,我们就可以正确加载文件。

import pandas as pd
import io
input_csv = io.StringIO("""
12345, 67890,{"key1":"value1", "key2":"value2","key3":"value3"},abcdefgh,{"key4":"value4"}
12345,67890,NONE, "abcdefgh",{"key4":"value4"}
""")
df = pd.read_csv(input_csv, header=None,
sep=r',(?! ?"w+"(?=:))', engine='python')
print(df.to_string())
---------------------------------------
0      1                                                   2            3                  4
0  12345  67890  {"key1":"value1", "key2":"value2","key3":"value3"}     abcdefgh  {"key4":"value4"}
1  12345  67890                                                NONE   "abcdefgh"  {"key4":"value4"}

"(? !?" w +"(? =:)),G,匹配字符,索引为4410(2C16或548)字面上(区分大小写)负向前看(?!?"w+"(?=:))断言下面的正则表达式不匹配索引为3210(2016或408)的字符敏感的)?匹配前一个标记0到1次,如尽可能多地回馈需要的人(贪婪)"匹配字符";索引为3410(2216或428)(区分大小写)w匹配任何单词字符(相当于[a-zA-Z0-9_])

  • 在一次到无限次之间匹配前一个令牌,尽可能多地匹配,根据需要返回(贪婪)"匹配字符";索引为3410(2216或428)(区分大小写)正向前看(?=:)断言下面的Regex匹配:匹配字符:索引5810 (3A16或728)字面上(大小写)敏感)

相关内容

  • 没有找到相关文章