Pandas:如何将多个数据帧作为 HTML 表格引用和打印

Posted

技术标签:

【中文标题】Pandas:如何将多个数据帧作为 HTML 表格引用和打印【英文标题】:Pandas: How to reference and print multiple dataframes as HTML tables 【发布时间】: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 表格——很高兴单独引用每个表格。

【问题讨论】:

【参考方案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:非常感谢您的改进!

以上是关于Pandas:如何将多个数据帧作为 HTML 表格引用和打印的主要内容,如果未能解决你的问题,请参考以下文章

将 pandas 数据帧数据作为 html 电子邮件发送

Pandas:将 Lambda 应用于多个数据帧

如何将多个 pandas 数据帧组合到一个键/组下的 HDF5 对象中?

将 MultiIndex Pandas 数据帧乘以来自另一个数据帧的多个标量

pandas行作为列名 - 重塑数据帧

如何将 Spark 数据帧转换为 Pandas 并返回 Kedro?