2016-08-02 33 views
0

Python的字典是在这样的格式:蟒字典

'{"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阅读器将逗号作为csv文件中的分隔符作为字典中的名字。由于我只指定了4个名为“”id“”,“gender”,“age”,“name”“的列,因此忽略了姓氏。

任何想法或可能的解决方案?谢谢!

+2

您是如何生产该文件的?引用也是无用的。 –

+0

是的,我认为他们也是无用的。该数据集由其他人生成。如果我这样做,我宁愿不要在该字段中使用python字典。现在问题在这里,我正在尝试基于此做一些工作。 –

+0

不幸的是,'pandas.read_csv()'对构成可接受的输入文件的构成要求更高一些。 ''python''引擎接受一个迭代器,但是期望它是'csv.reader()'对象。现在已经过时了。 –

回答

0

您可以更改read_csv使用的分隔符。如果你可以改变的CSV文件使用一个分号为分离柱,然后你可以使用read_csv(file.csv, sep=';'...)

或者您可以修复从

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

的报价,以

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

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

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