基于Python的COVID-19 CSV数据groupby与melt函数开发及报错咨询
报错根因
执行groupby聚合操作时,默认会将传入的分组键Country/Region设置为DataFrame的行索引,而非保留为普通数据列。DataFrame.melt的id_vars参数仅识别普通列、不识别行索引字段,因此会抛出“指定id_vars不存在”的错误。
原代码同时存在两个隐性问题:
- 列重命名逻辑中,
covid_case是函数传入的字符串参数,未被正确关联传入,会触发变量未定义的报错 - 函数定义名称为
meltedgroupby_covid_data,实际调用时使用的函数名拼写不匹配,会触发调用失败
实现逻辑说明
核心修复方案
在groupby聚合时添加as_index=False参数,强制让Country/Region始终作为普通列保留,不会被转为行索引,后续melt操作即可正常识别该字段。
流程合并可行性
完全可以将分组聚合、宽表转长表的操作串联在同一个函数流程中实现,不需要拆分为独立步骤。pandas本身支持链式的连续数据转换,这类串联操作是常规使用方式,不会产生额外运行开销。
可直接运行的修正代码
import pandas as pd def melted_groupby_covid_data(hopkin_url, case_type): # 读取CSV源数据 df = pd.read_csv(hopkin_url) # 移除不需要的维度列 df_drop = df.drop(['Province/State', 'Lat', 'Long'], axis=1) # 按国家聚合,保留国家字段为普通列 grouped_df = df_drop.groupby('Country/Region', as_index=False).sum() # 宽表转长表,直接指定新列名,无需后续重命名操作 melted_df = grouped_df.melt( id_vars=['Country/Region'], var_name='Date', value_name=case_type ) return melted_df
函数调用示例
confirmed_statistic = melted_groupby_covid_data( 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv', 'Confirmed' )
调用完成后输出的DataFrame会直接包含Country/Region、Date、Confirmed三个目标字段,完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者Negin Zarbakhsh
相关产品推荐
相关产品推荐

