【问题标题】:Condensing 5 lists containing 30 dictionaries each into single dataframe将 5 个包含 30 个字典的列表压缩成单个数据框
【发布时间】:2021-03-14 16:53:16
【问题描述】:

我有 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,这就是为什么我选择了那条路线。

【问题讨论】:

    标签: python pandas selenium


    【解决方案1】:

    除了您的 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(...) 添加到生成结果数据帧的指令中。

    【讨论】:

    • 这很好,感谢您的详细回答和所有帮助 - 干杯伙伴
    猜你喜欢
    • 2021-07-10
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 2018-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多