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

0g0grzrc  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(216)

我有一个CSV文件,其中包含几个JSON列,我正在使用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个字符)。

7vux5j2d

7vux5j2d1#

如果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(2C 16或548)的字符(区分大小写)负向前查找(?!?"\w+"(?=:))Assert下面的Regex不匹配按字面意义匹配索引为3210(2016或408)的字符(区分大小写)?按零到一次匹配上一个标记,尽可能多地按需要返回(贪婪)“按字面意义匹配索引为3410(2216或428)的字符”(区分大小写)\w匹配任何单词字符(等效于[a-zA-Z 0 -9_])

  • 在一次到无限次之间匹配上一个标记,尽可能多地匹配,根据需要返回(贪婪)“匹配字符“,索引为3410(2216或428),字面上(区分大小写)正向预视(?=:)Assert下面的正则表达式匹配:匹配字符:索引5810(3A 16或728)按字面(区分大小写)

相关问题