python - 如何将字典列表和嵌套列表转换为 pandas 数据框以用于降价表生成器?
问题描述
我有以下字典列表(其中包含嵌套列表):
compatibility = [
{'region': 'NTSC-U',
'stats': [
{'os': 'Windows', 'state': 'Playable'},
{'os': 'Linux', 'state': 'Playable'},
{'os': 'Mac', 'state': 'N/A'}
]},
{'region': 'PAL',
'stats': [
{'os': 'Windows', 'state': 'Playable'},
{'os': 'Linux', 'state': 'N/A'},
{'os': 'Mac', 'state': 'N/A'}
]},
{'region': 'NTSC-J',
'stats': [
{'os': 'Windows', 'state': 'N/A'},
{'os': 'Linux', 'state': 'N/A'},
{'os': 'Mac', 'state': 'N/A'}
]}
]
我正在尝试使用pytablewriter
并pandas
为此数据生成一个降价表,但我似乎无法处理数据框的唯一值和列排序。
这是我的函数,其中包含此输出的外观示例:
def generate_table():
compatibility = find_compatibility()
writer = MarkdownTableWriter()
writer.from_dataframe(
pd.DataFrame({'NTSC-U': ['Playable', 'Playable', 'N/A'], 'PAL': ['Playable', 'N/A', 'N/A'],
'NTSC-J': ['N/A', 'N/A', 'N/A']}, index=['Windows', 'Linux', 'Mac']),
add_index_column=True,
)
writer.write_table()
我将如何生成这个?我已经考虑过使用集合来提取唯一的操作系统名称,但这似乎不适用于带有嵌套列表的字典列表。(而且由于数据结构有时只包含一个区域,它需要是动态的)。
任何帮助深表感谢!
解决方案
您可以从规范化 json开始,选择“stats”作为记录路径。
df = pd.json_normalize(compatibility, "stats", ["region"])
print(df)
os state region
0 Windows Playable NTSC-U
1 Linux Playable NTSC-U
2 Mac N/A NTSC-U
3 Windows Playable PAL
4 Linux N/A PAL
5 Mac N/A PAL
6 Windows N/A NTSC-J
7 Linux N/A NTSC-J
8 Mac N/A NTSC-J
然后你只需使用 pivot 来获得所需的输出。
df = df.pivot("os", "region", values="state")
print(df)
region NTSC-J NTSC-U PAL
os
Linux N/A Playable N/A
Mac N/A N/A N/A
Windows N/A Playable Playable
推荐阅读
- memory - 在微控制器中缓冲需要时钟周期吗?”
- python - 多指数汇总指标
- html - HTML RegEx(首字母大写)
- ruby-on-rails - Rails pg 数据库:schema_migrations 为空
- javascript - 如何从 XML 中选择随机子元素并显示子子元素;使用 JS?
- java - 需要能够使用遥控器导航软键盘
- php - 在一列中插入多个图像作为逗号分隔列表
- javascript - 在方法之间传递参数似乎并没有改变打字稿中的 agument
- amazon-web-services - 无服务器后端 (AWS) 的国际化
- mongodb - 根据其他集合数组中匹配的对象属性执行 $lookup