首页 > 解决方案 > 将包含 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,这就是我选择这条路线的原因.

标签: pythonpandasselenium

解决方案


除了您的 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 的指令中。

推荐阅读