【问题标题】:Pandas: How to reference and print multiple dataframes as HTML tablesPandas:如何将多个数据帧作为 HTML 表格引用和打印
【发布时间】:2016-08-11 17:10:49
【问题描述】:

我正在尝试从 groupby 中拆分出单独的数据帧,以将它们打印为 pandas HTML 表格。我需要引用它们并将它们单独呈现为表格,以便我可以截取它们以进行演示。

这是我当前的代码:

import pandas as pd

df = pd.DataFrame(
    {'area': [5, 42, 20, 20, 43, 78, 89, 30, 46, 78],
     'cost': [52300, 52000, 25000, 61600, 43000, 23400, 52300, 62000, 62000, 73000], 
     'grade': [1, 3, 2, 1, 2, 2, 2, 4, 1, 2], 'size': [1045, 957, 1099, 1400, 1592, 1006, 987, 849, 973, 1005], 
     'team': ['man utd', 'chelsea', 'arsenal', 'man utd', 'man utd', 'arsenal', 'man utd', 'chelsea', 'arsenal', 'arsenal']})

result =  df.groupby(['team', 'grade']).agg({'cost':'mean', 'area':'mean', 'size':'sum'}).rename(columns={'cost':'mean_cost', 'area':'mean_area'})

dfs = {team:grp.drop('team', axis=1) 
       for team, grp in result.reset_index().groupby('team')}

for team, grp in dfs.items():
    print('{}:\n{}\n'.format(team, gap))

哪些打印(作为非 HTML 表格):

chelsea:
   grade  mean_cost  mean_area  size
2      3      52000         42   957
3      4      62000         30   849

arsenal:
   grade     mean_cost  mean_area  size
0      1  62000.000000  46.000000   973
1      2  40466.666667  58.666667  3110

man utd:
   grade  mean_cost  mean_area  size
4      1      56950       12.5  2445
5      2      47650       66.0  2579

是否可以将这些数据帧一一获取为 HTML 表格?为免生疑问,我不需要一种迭代方法来一次性将它们全部返回为 HTML 表格——很高兴单独引用每个表格。

【问题讨论】:

    标签: python pandas ipython jupyter-notebook


    【解决方案1】:

    作为Thomas K points out,您可以使用IPython.core.display.display 将DataFrames 的显示与打印语句合并到IPython 笔记本中:

    import pandas as pd
    from IPython.core import display as ICD
    
    
    df = pd.DataFrame(
        {'area': [5, 42, 20, 20, 43, 78, 89, 30, 46, 78],
         'cost': [52300, 52000, 25000, 61600, 43000, 23400, 52300, 62000, 62000, 73000], 
         'grade': [1, 3, 2, 1, 2, 2, 2, 4, 1, 2], 'size': [1045, 957, 1099, 1400, 1592, 1006, 987, 849, 973, 1005], 
         'team': ['man utd', 'chelsea', 'arsenal', 'man utd', 'man utd', 'arsenal', 'man utd', 'chelsea', 'arsenal', 'arsenal']})
    
    result =  df.groupby(['team', 'grade']).agg({'cost':'mean', 'area':'mean', 'size':'sum'}).rename(columns={'cost':'mean_cost', 'area':'mean_area'})
    
    dfs = {team:grp.drop('team', axis=1) 
           for team, grp in result.reset_index().groupby('team')}
    
    for team, grp in dfs.items():
        print(team)
        ICD.display(grp)
    

    生成

    【讨论】:

    • 你这里实际上有一个不必要的步骤——你应该可以在最后调用ICD.display(grp)来显示数据框的丰富repr。
    • @ThomasK:非常感谢您的改进!
    猜你喜欢
    • 2023-02-05
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 2020-09-22
    • 2019-05-31
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    相关资源
    最近更新 更多