【问题标题】:python dict in comma separated csv file逗号分隔的csv文件中的python dict
【发布时间】:2016-12-08 06:11:44
【问题描述】:

Python dict 的格式如下:

'{"a":1, "b":2, "c":3}'

注意它使用逗号来分隔不同的键:值对。

问题是我有一个 CSV 文件,它也是用逗号分隔的列:

'
  "id",   "gender",   "age",    "name"
 "001",     "male",    "14",    "{"first":"Mike", "last":"Green"}"
 "002",   "female",    "15",    "{"first":"Kate", "last":"Spear"}"
'

当我这样做时
pandas.read_csv('csvfile.csv', sep = ',', names=["id", "gender", "age", "name"])

我明白了:

'
  "id",   "gender",   "age",    "name"
 "001",     "male",    "14",    "{"first":"Mike"
 "002",   "female",    "15",    "{"first":"Kate"
'

我猜的原因是 csv 阅读器将 dict 中的名字后面的逗号视为 csv 文件中的分隔符。由于我只指定了 4 个名为“id”、“gender”、“age”、“name””的列,所以它忽略了姓氏。

对此有什么想法或可能的解决方案吗?谢谢!

【问题讨论】:

  • 您最初是如何生成该文件的?引用也相当无用。
  • 是的,我认为它们也没用。这个数据集是由其他人生成的。如果我这样做了,我宁愿不在那个领域使用 python dict。现在问题来了,我正在尝试在此基础上做一些工作。
  • 不幸的是,pandas.read_csv() 对可接受的输入文件的构成要求更高。 'python' 引擎接受一个迭代器,但随后期望它是一个 csv.reader() 对象。暂时没时间了。
  • 也许你可以使用 dtype 参数来强制最后一列?或者尝试使用 sep=',{}'。真的是在黑暗中拍摄。
  • 解析这个没有标题,然后删除 { , } 的

标签: python csv pandas dictionary


【解决方案1】:

您可以更改read_csv 使用的分隔符。如果您可以将 csv 文件更改为使用分号分隔列,则可以使用 read_csv(file.csv, sep=';'...)

或者,您可以修复来自

的引用
"001",     "male",    "14",    "{"first":"Mike", "last":"Green"}"

"001",     "male",    "14",    "{'first':'Mike', 'last':'Green'}"

当然,这两种方法都意味着编辑 csv 文件。

第二个看起来更健全。正则表达式(\{[^"]*)(")([^}]*\}) 可用于匹配大括号内的引号。 (未经测试)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-30
    • 2018-06-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    相关资源
    最近更新 更多