我有这个数据框:
df = pd.DataFrame([
{ "name": "foo", "results": "{'lower_bound': '15000', 'upper_bound': '19999'}"},
{ "name": "bar", "results": "{'lower_bound': '10000', 'upper_bound': '14999'}"}
])
当前看起来像这样:
name results
0 foo {'lower_bound': '15000', 'upper_bound': '19999'}
1 bar {'lower_bound': '10000', 'upper_bound': '14999'}
我想将
results
列转换为结构化数据,因此我可以过滤df.lower_bound小于13000的行。我怎样才能做到这一点?
最佳答案
另一种方法是使用json_normalize和ast_literal
from pandas.io.json import json_normalize
from ast import literal_eval
然后拆分JSON col,然后将它们合并回它们的索引。
s = json_normalize(df['results'].apply(literal_eval).astype(int))
df_new = pd.merge(df,s,right_index=True,left_index=True)
print(df_new)
name Results lower_bound upper_bound
0 foo {'lower_bound': '15000', 'upper_bound': '19999'} 15000 19999
1 bar {'lower_bound': '10000', 'upper_bound': '14999'} 10000 14999
对于dtypes:
print(df_new.dtypes)
name object
results object
lower_bound int32
upper_bound int32
dtype: object
关于python - 在 Pandas 中解析一列字符串化字典,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59238706/