Pandas sum(axis=1)返回一维结果无法调用insert方法的解决方法
问题原因
你当前代码返回的是pandas一维Series结构,而非二维DataFrame:
- 对DataFrame执行
sum(axis=1)按行求和时,默认会压缩列维度,返回带行索引的一维Series,shape输出为(行数,)格式,不存在列维度,自然不支持仅DataFrame才有的insert等列操作方法。 - 只有shape为
(行数, 列数)格式的二维DataFrame,才能正常调用列操作相关方法。
解决方案
通用兼容方案(全pandas版本支持)
求和后调用to_frame()方法将一维Series转为单列DataFrame,可直接指定列名,无需考虑版本兼容问题:
# 示例中列名自定义为total_kwh,可根据业务需求替换 df = df1_kwh.multiply(df2np).sum(axis=1).to_frame(name='total_kwh')
执行后查看df.shape会得到(347, 1),属于标准二维DataFrame结构,insert、assign、join等所有DataFrame原生方法都可正常调用。
高版本pandas简化写法(pandas 2.0及以上支持)
如果你的环境pandas版本≥2.0,可以直接在sum方法中传入keepdims=True参数,求和时直接保留二维结构,不压缩列维度:
df = df1_kwh.multiply(df2np).sum(axis=1, keepdims=True) # 可按需重命名列 df.columns = ['total_kwh']
补充说明:如果后续仅需要做列拼接操作,也可以直接用
pd.concat([df_other, series_result], axis=1)实现,pandas会自动对齐索引完成拼接,不需要强制转DataFrame,但如果要调用insert这类DataFrame实例方法,必须先转为二维DataFrame结构。
内容的提问来源于stack exchange,提问作者Milo
相关产品推荐
相关产品推荐

