Jupyter Notebook表格样式显示不一致问题咨询
Jupyter Notebook表格样式差异的原因及解决办法
核心差异:返回的pandas对象类型不同
你两段代码的输出分别是DataFrame和Series,Jupyter对这两种对象的默认渲染规则不一样:- 第一段代码
df.groupby(['Gender','City'])['Income'].agg(['min','mean','max']):通过agg传入多个统计函数,最终生成的是二维DataFrame,Jupyter对DataFrame默认会渲染成带边框、单元格分隔的美化表格,也就是你说的“带样式”的形式。 - 第二段代码的计算结果:
groupby后用count()得到的是带多级索引的一维Series,Jupyter对Series的默认渲染更简洁,没有DataFrame那种完整的表格样式,看起来就是纯文本式的索引+值列表。
- 第一段代码
验证方法
你可以在两段代码末尾分别调用type()函数,查看返回的对象类型:type(df.groupby(['Gender','City'])['Income'].agg(['min','mean','max'])) # 输出:<class 'pandas.core.frame.DataFrame'> type((df.loc[df['Survived'] == 1].groupby(['Sex','Pclass','Age','Fare','Embarked'])['Survived'].count().sort_values(ascending=False)) / total_survived) # 输出:<class 'pandas.core.series.Series'>让第二段结果也显示带样式表格的方法
把Series转换成DataFrame即可,最简单的方式是用.to_frame()方法,还可以给列名命名更清晰:total_survived = df['Survived'].sum() result = (df.loc[df['Survived'] == 1] .groupby(['Sex','Pclass','Age','Fare','Embarked'])['Survived'] .count() .sort_values(ascending=False)) / total_survived # 转换成DataFrame并指定列名 result_df = result.to_frame(name='Survival_Rate') result_df这样渲染出来的就是和第一段一样的带样式表格了。
关于样式指南无效的补充说明
pandas的.style样式接口是针对DataFrame设计的,直接在Series上调用不会生效,所以你之前尝试用样式指南没效果,本质是对象类型不对,转成DataFrame后再用.style设置样式就能正常工作了。
内容的提问来源于stack exchange,提问作者insectsongs
相关产品推荐
相关产品推荐

