【发布时间】:2018-09-08 07:28:27
【问题描述】:
类似于this question,但我的 CSV 格式略有不同。这是一个例子:
id,employee,details,createdAt
1,John,"{"Country":"USA","Salary":5000,"Review":null}","2018-09-01"
2,Sarah,"{"Country":"Australia", "Salary":6000,"Review":"Hardworking"}","2018-09-05"
我认为 JSON 列开头的双引号可能导致了一些错误。使用df = pandas.read_csv('file.csv'),这是我得到的数据框:
id employee details createdAt Unnamed: 1 Unnamed: 2
1 John {Country":"USA" Salary:5000 Review:null}" 2018-09-01
2 Sarah {Country":"Australia" Salary:6000 Review:"Hardworking"}" 2018-09-05
我想要的输出:
id employee details createdAt
1 John {"Country":"USA","Salary":5000,"Review":null} 2018-09-01
2 Sarah {"Country":"Australia","Salary":6000,"Review":"Hardworking"} 2018-09-05
我尝试添加 quotechar='"' 作为参数,但它仍然没有给我想要的结果。有没有办法告诉 pandas 忽略 json 值周围的第一个和最后一个引号?
【问题讨论】:
-
问题不在于引号,而在于逗号,而读取csv时,所有以逗号分隔的条目都被视为下一列
-
@Gahan CSV 中的单列可以包含逗号。问题可能是字符串上的封闭
",导致逗号被解释为新列而不是字典结构的一部分 -
@roganjosh ,我试过了,结构太负责了,因为引号括起来
"{"然后Country没有引号,然后":"在引号中,然后USA"和逗号遇到了哪个将其解释为下一列值 -
我怀疑它只能用正则表达式来解决,这让我无法帮助抱歉:/
-
与其尝试解析它,不如首先不要混合使用两种交互不良的元格式(CSV、JSON)来写入数据。只需一直使用 JSON 作为默认值。如果你必须使用这个,你需要转义引号。