我有一个csv文件,其列的类型是字典(列' b'在下面的示例中)。但 df 中的 b 是字符串类型,即使我将其定义为字典类型。我没有找到这个问题的解决方案。有什么建议吗?
a = pd.DataFrame({'a': [1,2,3], 'b':[{'a':3, 'haha':4}, {'c':3}, {'d':4}]})
a.to_csv('tmp.csv', index=None)
df = pd.read_csv('tmp.csv', dtype={'b':dict})
答案 0 :(得分:2)
pandas中没有字典类型。因此,如果您需要普通的Python对象,则应指定object
:
df = pd.read_csv('tmp.csv', dtype={'b':object})
这将包含字符串,因为pandas不知道字典是什么。如果你想再次使用词典,你可以试着" eval"他们使用ast.literal_eval
(安全字符串评估):
df['b'] = df['b'].apply(ast.literal_eval)
print(df['b'][0]['a']) # 3
如果您确信自己从未在不受信任的csv上运行此操作,那么您也可以使用eval
。但是在你考虑我之前我会建议你只使用DataFrame
和#34; native" pandas或NumPy类型(或DataFrame
方法中的DataFrame
)。最好尽量避免使用object
dtypes。
答案 1 :(得分:2)
我想知道你的CSV列是否真的是一个Python dict列,或者更确切地说是JSON。如果是JSON,您可以将该列读作dtype=str
,然后使用该列上的json_normalize()
将其分解为多个列。假设列包含有效的JSON,这是一种有效的解决方案。