使用pandas groupby生成保留分组条件的DataFrame仅显示1列如何解决?
问题原因
你当前的写法中,groupby操作默认会将分组键(也就是你用到的Country字段)设置为结果的行索引,不会作为普通列保留。你对单列Deaths求和后得到的是Series类型,外层套DataFrame后,Country依然是索引而非普通列,因此查看DataFrame结构时只会显示1个数值列,而写入CSV时pandas默认会导出索引列,才会出现2列的情况。
解决方法
有两种常用方案可以实现保留Country为普通列,得到包含两列的DataFrame:
- 方案1:分组时添加
as_index=False参数,直接让分组键不作为索引,直接生成符合要求的DataFrame,无需额外套DataFrame构造方法:
#import matplotlib.pyplot as plt import pandas as pd from pandas.core.frame import DataFrame covid_data = pd.read_csv('countries-aggregated.csv') # 核心修改:添加as_index=False参数 bar_data = covid_data.groupby('Country', as_index=False)['Deaths'].sum()
- 方案2:如果你已经用原有写法生成了结果,调用
reset_index()方法即可把索引转换为普通列:
# 原有逻辑不变 bar_data = pd.DataFrame(covid_data.groupby('Country')['Deaths'].sum()) # 新增行,将索引转为普通列 bar_data = bar_data.reset_index()
两种方案处理后得到的bar_data都会包含Country和Deaths两个普通列,查看和写入CSV的表现会一致。
内容的提问来源于stack exchange,提问作者woods
相关产品推荐
相关产品推荐

