python - 将包含 30 个字典的 5 个列表压缩到单个数据帧中
问题描述
我有 5 个列表,每个列表包含 30 个字典。每个字典都有两个键值对,team_name 和 fd_points,它们表示每场比赛球队放弃了多少分给对方位置,例如:
point_guards = [
{'team_name': 'NOR', 'fd_points': '56.15'},
{'team_name': 'ORL', 'fd_points': '53.72'},
]
shooting_guards = [
{'team_name': 'NOR', 'fd_points': '57.13'},
{'team_name': 'ORL', 'fd_points': '43.72'},
]
我想将所有这些列表压缩成一个数据框,我将把它写入一个 csv,其中最终产品将每个团队名称显示为跨 5 列的行,每列代表团队放弃每个相对位置的点数。
NOR, PG_points, SG_points, SF_points, PF_points, C_points
ORL, PG_points, SG_points, SF_points, PF_points, C_points
如果有比将所有数据放入数据框中更好的方法,我愿意接受建议,我会抓取其他数据并将其放入数据框然后写入 csv,这就是我选择这条路线的原因.
解决方案
除了您的 2 个字典列表之外,我还创建了另一个列表 - SF_points的来源:
sf_src = [
{'team_name': 'NOR', 'fd_points': '44.01'},
{'team_name': 'ORL', 'fd_points': '49.12'}]
第一步是创建单独的 DataFrame,包含以下 3 个列表:
pg = pd.DataFrame(point_gaurds).rename(columns={'fd_points': 'PG_points'}).set_index('team_name')
sg = pd.DataFrame(shooting_gaurds).rename(columns={'fd_points': 'SG_points'}).set_index('team_name')
sf = pd.DataFrame(sf_src).rename(columns={'fd_points': 'SF_points'}).set_index('team_name')
分别打印它们中的每一个。
注意:
- fd_points列在每种情况下都已重命名为要出现在结果中的名称,
- 在每种情况下,team_name都设置为索引。
然后,要创建一个“复合”DataFrame,运行:
result = pg.join(sg).join(sf)
要创建输出 CSV 文件,请运行:
result.to_csv()
结果是:
team_name,PG_points,SG_points,SF_points
NOR,56.15,57.13,44.01
ORL,53.72,43.72,49.12
在我看来,第一行(列名)需要显示每列的含义。如果要省略此行,请运行:
result.to_csv(header=False)
要获得“完整”结果,剩余 2 列:
- 定义各自的“src”列表,
- 从它们创建各自的 DataFrames,适当地重命名fd_points,列,
- 添加
.join(...)
到生成结果DataFrame 的指令中。
推荐阅读
- laravel - Laravel Eloquent 查询构建,用于按日期进行搜索
- laravel - 在多个磁盘上复制存储
- xml - Powershell CSV 到 XML
- c# - SimpleTcpClient 发送单字节和接收单字节不带分隔符
- cordova - “Ionic v4”-使用Phonegap构建的应用程序显示白屏
- sql-server - DTS 转换为 SSIS 派生列表达式
- java - JSON映射出现问题
- java - 将 JavaFX 应用程序与 openjdk 11 + 运行时捆绑在一起
- python - 无法以字符串格式方法更新 defaultdict
- python - MySQL 拒绝远程连接