【发布时间】:2020-12-03 11:46:02
【问题描述】:
我有一个 df
name manufacturer information
John Ford {'city':'London', 'colour':'black' , 'year': '2017'}
Jane Porsche {'city':'Birmingham', 'colour':'red' , 'year': '2019'}
我想创建一个 new_df,其中包含 'name' 和 'colour' 中的值
name colour
John black
Jane red
不幸的是,由于数据被预处理的方式以及我只提供了一个 csv 的事实,“信息”是一个字符串(熊猫对象)而不是一个嵌套字典。我知道数据不应该像这样嵌套在单个列中,这确实很烦人,但我无法控制。
我目前的解决方案是
colour_col = []
for i in df['information']:
colour_col.append(i.split('\'')[7])
df['colour'] = colour_col
new_df = df[['name', 'colour']]
这暂时有效。但是,如果“颜色”值的位置发生变化,代码就会翻倒。或者,代码可能会运行但数据不正确。
是否有遵循最佳实践的有效方法来实现 new_df?我可以将 ['information'] 列转换回嵌套字典并通过字符串访问值吗?像 new_df = df[信息][颜色]
注意:关键字符串不会改变
【问题讨论】:
-
要清楚,您的信息列中的值是字符串,例如:
"{'city':'London', 'colour':'black' , 'year': '2017'}"? -
我最近回答了一些关于如何将 JSON 扩展为列的问题。使用
pd.concat()和pd.json_normalize()。 stackoverflow.com/questions/63395522/… -
ALollz - 正确,是的
标签: python pandas string dictionary