我有以下数据框:
print(df.source)
source
0 "{'id': None, 'name': 'Cnet.com'}",
1 "{'id': None, 'name': 'Cnet.com'}",
2 "{'id': None, 'name': 'Cnet.com'}",
...
我想访问“名称”中包含的信息,最终创建:
print(df_final.source)
source
0 Cnet.com
1 Cnet.com
2 Cnet.com
...
我尝试过:
dictio = df["source"].to_dict()
for i in range(0, len(df)):
dictio[i]["name"]
但是会引发错误:“ TypeError:字符串索引必须是整数”。
如何创建df_final?
答案 0 :(得分:1)
通过ast
将值转换为字典,然后通过get
获取值:
import ast
df['source'] = df['source'].apply(lambda x: ast.literal_eval(x).get("name", 'missing value'))
或者在以后需要时使用字典列:
import ast
df['source'] = df['source'].apply(ast.literal_eval)
df['source'] = df['source'].apply(lambda x: x.get("name", 'missing value'))
答案 1 :(得分:0)
问题在于您在源列中的数据是字符串格式。
我们可以使用json
包将其转换为字典格式,然后从中访问名称字段。
我认为此片段应该有效。
import json
for index, row in df.iterrows():
sourceDict = json.loads(row['source'])
name = sourceDict['name']