从Python数据帧中提取值

从Python数据帧中提取值,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个熊猫数据框,格式如下: ID|Date|Values 1234|2021-01-01|{"Reason":"Change", "New Value":"Segment 2", "Old Value":"Segment 1"} 我想解析values列并创建一个新的数据帧: ID|Date|Old|New 值的顺序有时是不同的。如何在Python中提取这些值 df[[&

我有一个熊猫数据框,格式如下:

ID|Date|Values
1234|2021-01-01|{"Reason":"Change", "New Value":"Segment 2", "Old Value":"Segment 1"}
我想解析values列并创建一个新的数据帧:

ID|Date|Old|New
值的顺序有时是不同的。如何在Python中提取这些值

df[["Old", "New"]] = df["Values"].apply(lambda d: (d["Old Value"], d["New Value"])) \
                                 .tolist()
df = df.drop(columns="Values")
另一种方法:

import operator

old = operator.itemgetter("Old Value")
new = operator.itemgetter("New Value")

df["Old"] = df["Values"].apply(old)
df["New"] = df["Values"].apply(new)
df = df.drop(columns="Values")

您可以使用
pd.DataFrame()
将字典提取到列中。从生成的新数据帧中获取2个相关列,并使用将其与原始数据帧连接,然后按删除原始

请注意,在执行相同任务的各种方法中,使用
pd.DataFrame()
将字典提取到列中是最快的。它比在lambda函数中使用
.apply()
要快得多

结果:

print(df_new)


     ID        Date  Old Value  New Value
0  1234  2021-01-01  Segment 1  Segment 2

这回答了你的问题吗?列是一个对象,因此我得到了“TypeError:字符串索引必须是整数”如何创建示例数据帧:
pd.dataframe(…)
?请将
df.info()
df.head()
输出添加到您的帖子中。我得到以下信息:“[Index(['Old Value','New Value'],dtype='object')]中没有一个在[columns]中。”
print(df_new)


     ID        Date  Old Value  New Value
0  1234  2021-01-01  Segment 1  Segment 2