pandas - 如何将熊猫数据框的最后一列设置为某些列的总和?
问题描述
我在这里读了这个帖子
由于我不明白的原因,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 的优点之一是您可以经常使用矢量化操作而不是循环。因此,在您的情况下,可以像这样对数据帧的二维切片求和:
df['your_score'] = df.loc[:, 'Week1':'Week19'].sum(axis=1)
loc
运算符允许按标签进行索引和切片。:
选择所有行,所以我们得到一个子数据框。该df.sum()
方法基于同名的 NumPy 函数,因此您可以选择一个维度与axis
参数求和。
推荐阅读
- google-apps-script - mailApp.sendEmail 不发送给当前用户
- c# - SDK 中缺少 AWSClientFactory 和其他 Amazon 类型
- android - UI automator 转储“Killed”
- swift - 为每个 tableview 实体触发单独的 segue
- docker - 在 Docker Compose 上使用 SSL 的 Kong API 网关
- pandas - 如何创建 agg func 来处理 Pandas 中的除以 0?
- c# - ASP.NET MVC + ORACLE + Entity Framework 错误:无法生成显式迁移
- javascript - 在刀片中定义 vuejs 组件
- javascript - 将 JS 函数(外部 JS)携带到另一个 PHP 文件中“包含”的 PHP 文件
- powershell - 如何将命令行参数传递给腻子而不使它们在powershell / cmd中可见?