如何解决熊猫:以不同方式访问列中的字符串 样本数据
我有一个df
name manufacturer information
John Ford {'city':'London','colour':'black','year': '2017'}
Jane Porsche {'city':'Birmingham','colour':'red','year': '2019'}
我想创建一个new_df,其中包含“名称”和“颜色”中的值
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 [information] [colour]
注意:密钥字符串不会更改
解决方法
您可以使用ast
将这些字符串评估为字典,然后让我们一次获取所有信息,因为这是一个缓慢的应用。从那里,您可以放下'information'
列并使用普通的DataFrame。
import pandas as pd
import ast
df = pd.concat([df.drop(columns='information'),df['information'].apply(lambda x: pd.Series(ast.literal_eval(x)))],axis=1)
name manufacturer city colour year
0 John Ford London black 2017
1 Jane Porsche Birmingham red 2019
样本数据
df = pd.DataFrame({'name': ['John','Jane'],'manufacturer': ['Ford','Porsche'],'information': ["{'city':'London','colour':'black','year': '2017'}","{'city':'Birmingham','colour':'red','year': '2019'}"]})
,
这是解决方案:
import json
colour_col = []
for i in df['information']:
jsonStr = json.loads(i.replace("'",'"'))
colour_col.append(jsonStr['colour'])
df['colour'] = colour_col
new_df = df[['name','colour']]
print(new_df)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。