首页 > 解决方案 > 如何将熊猫数据框的最后一列设置为某些列的总和?

问题描述

我在这里读了这个帖子

由于我不明白的原因,pandas 不会读取我 Excel 最后一列中公式的值。

Excel 中的 W 列只是每一行的 D 到 V 列的总和。

我需要将此 Excel 保存为 .csv 以导入 MySQL。所以我用熊猫。

print('Now converting to csv .... ')
newname = target.split('.')
savename = newname[0] + '.csv'
#read_file = pd.read_excel (pathTarget + target)
df = pd.read_excel (pathTarget + target, sheet_name=clas)
#read_file.to_csv (pathTarget + savename, index = None, header=True)
df.to_csv(pathTarget + savename, index=False)

但是我在最后一列没有得到任何东西,所以我想,修改数据框然后将其保存为 csv。

我可以很容易地得到我想要的列的总和:

new_val = df.index
for x in new_val:
    print(x)
    ys = df.iloc[x]['Week1':'Week19'].sum()
    print('your total score is', ys)

我可以轻松地将整列“your_score”设置为 1 值,例如 606,如上面链接中的线程中所示。

df['your_score'] = ys

但我无法运行循环并将每行总和分配给最后一列“your_score”

df.iloc[0]['your_score'] = ys

我得到错误:

警告(来自警告模块):文件“<pyshell#26>”,第 1 行 SettingWithCopyWarning:试图在 DataFrame 的切片副本上设置值

请参阅文档中的注意事项: https ://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy

我尝试了各种方法,但最后我只是使用 Pandas 将 Excel 编写为 csv,然后使用 Python 的 csv 模块来做我想做的事。

我怎样才能把每一行总和

ys = df.iloc[x]['Week1':'Week19'].sum()

在 Pandas 中 iloc 位置的最后一列?

标签: pandas

解决方案


pandas 的优点之一是您可以经常使用矢量化操作而不是循环。因此,在您的情况下,可以像这样对数据帧的二维切片求和:

df['your_score'] = df.loc[:, 'Week1':'Week19'].sum(axis=1)

loc运算符允许按标签进行索引和切片。:选择所有行,所以我们得到一个子数据框。该df.sum()方法基于同名的 NumPy 函数,因此您可以选择一个维度与axis参数求和。


推荐阅读