你有正确的想法使用
ast.literal_eval
.有多种方法可以使用数据帧,但是一旦你有了
dict
中的对象
obj_list
在列表上循环以获取每行的名称和值,并将它们作为数据帧列附加到末尾,可能会更简单。这就是我在这里采用的方法。
dict.items
提供(键、值)元组的列表,因此需要找到其中的最大值
以价值为关键
.这已在以下线程中讨论:
How to find the maximum value in a list of tuples?
Finding max value in the second column of a nested list?
有多种方法可以做到这一点,但我选择了使用lambda函数作为关键参数(
name, value = max(obj_as_dict.items(), key=lambda x: x[1])
).
完整代码如下。我只是拿了数据帧的前两行来测试一下。
import pandas as pd
import ast
df = pd.DataFrame(['{"Sony": 25,"Max":91,"James":55}', '{"Jack":12,"Max":10}'])
df.columns = ["Obj_values"]
obj_list = df['Obj_values'].tolist()
names = []
values = []
for obj in obj_list:
obj_as_dict = ast.literal_eval(str(obj))
name, value = max(obj_as_dict.items(), key=lambda x: x[1])
names.append(name)
values.append(value)
df['Name'] = names
df['Value'] = values
print(df)
输出:
Obj_values Name Value
0 {"Sony": 25,"Max":91,"James":55} Max 91
1 {"Jack":12,"Max":10} Jack 12