如何展开Pandas DataFrame中存储为字符串的字典列
字符串格式字典列的DataFrame解析方案
问题背景
现有DataFrame结构如下:
import pandas as pd df = pd.DataFrame({'a':[1,2,3], 'b':["{'c':1}", "{'d':3}", "{'c':5, 'd':6}"]})
需要转换为如下格式:
a c d 0 1 1.0 NaN 1 2 NaN 3.0 2 3 5.0 6.0
由于b列存储的是字符串形式的字典,直接调用df['b'].apply(pd.Series)无法生效,且无法修改b列的原始结构,需针对性解析。
可行解决方案
方法1:用ast.literal_eval安全解析
ast.literal_eval能安全将字符串化的Python对象转为实际对象,适配单引号格式的字符串字典:
import ast import pandas as pd # 解析b列字符串为字典,再转为Series parsed_b = df['b'].apply(ast.literal_eval).apply(pd.Series) # 合并原a列与解析结果 result_df = pd.concat([df['a'], parsed_b], axis=1) print(result_df)
方法2:替换引号后用json.loads解析
若无法使用ast模块,可先将单引号替换为双引号,再用json.loads解析:
import json import pandas as pd # 替换单引号为双引号,解析为字典后转Series parsed_b = df['b'].str.replace("'", "\"").apply(json.loads).apply(pd.Series) result_df = pd.concat([df['a'], parsed_b], axis=1) print(result_df)
注意:若字符串中包含转义单引号,此方法可能失效,优先选择方法1。
内容的提问来源于stack exchange,提问作者user13744439
相关产品推荐
相关产品推荐

