如何对DataFrame中每行字典排序后透视生成对应表头列?
实现代码
你可以直接用pandas内置的json_normalize方法完成字典列的展开,再对列名排序即可,完整示例如下:
import pandas as pd import numpy as np # 此处替换为你自己的原始DataFrame,存字典的列假设名为dict_col df = pd.DataFrame({ 'dict_col': [ {'key_b': 40, 'key_d': 1, 'key_e': 15, 'key_h': 11, 'key_f': 15, 'key_a': 273, 'key_c': 9}, {'key_c': 10, 'key_a': 286, 'key_b': 42}, {'key_f': 1}, {'key_g': 'trial', 'key_i': 1}, {'key_d': 1, 'key_e': 3, 'key_h': 2, 'key_i': 1, 'key_c': 11, 'key_b': 47, 'key_a': 325, 'key_g': 'premium'}, {'key_g': 'trial'} ] }) # 展开字典列为独立列,不存在的键自动填充NaN result = pd.json_normalize(df['dict_col']) # 对所有列名按字典序排序,满足键排序需求 result = result.reindex(sorted(result.columns), axis=1) # 可选:将NaN替换为字符串'null',符合你示例中的输出格式 result = result.replace(np.nan, 'null')
输出效果
执行后result的内容和你要求的完全一致:
| key_a | key_b | key_c | key_d | key_e | key_f | key_g | key_h | key_i |
|---|---|---|---|---|---|---|---|---|
| 273 | 40 | 9 | 1 | 15 | 15 | null | 11 | null |
| 286 | 42 | 10 | null | null | null | null | null | null |
| null | null | null | null | null | 1 | null | null | null |
| null | null | null | null | null | null | trial | null | 1 |
| 325 | 47 | 11 | 1 | 3 | null | premium | 2 | 1 |
| null | null | null | null | null | null | trial | null | null |
补充说明
如果需要保留原始DataFrame中除字典列外的其他字段,可以用concat方法合并:
result = pd.concat([df.drop('dict_col', axis=1), result], axis=1)
内容的提问来源于stack exchange,提问作者Atreides
相关产品推荐
相关产品推荐

