Pythonic方式:从两层嵌套字典列表创建DataFrame的最优方法
嵌套字典结构转目标DataFrame的Pythonic实现
首先给出你的固定输入结构示例,方便对应代码逻辑:
# 固定不可修改的输入结构示例 input_data = { "inputs": [ { "TimeGenerated": "2024-05-20 12:00:00", "counters": { "counter1": 12.34, "counter2": 56.78, "counter3": 90.12 } }, # 其余结构一致的元素 ] }
方案1:使用pandas内置json_normalize(最推荐,易维护)
这是pandas专门为嵌套结构化数据提供的原生转换方法,不需要手动遍历字段,代码简洁度最高:
import pandas as pd df = pd.json_normalize(input_data["inputs"]).rename( columns=lambda col: col.removeprefix("counters_") )
说明:
json_normalize会自动把嵌套的counters下的字段压平为counters_counter1格式,通过removeprefix直接去掉前缀即可得到目标列名。Python 3.9+支持removeprefix方法,如果是低版本Python可以替换为col.replace("counters_", "")。
方案2:生成器表达式解包(大数量级更高效)
如果处理的输入数据量超过10万条,想要更低的内存占用和更快的处理速度,可以用字典解包+生成器表达式实现,不需要提前生成完整的单层字典列表:
import pandas as pd df = pd.DataFrame( {"TimeGenerated": item["TimeGenerated"], **item["counters"]} for item in input_data["inputs"] )
说明:通过
**解包counters内的所有键值对,直接和TimeGenerated拼接为单层字典,生成器表达式避免了额外的内存开销,适合超大批量数据处理。
内容的提问来源于stack exchange,提问作者Anirban Saha
相关产品推荐
相关产品推荐

