如何将pandas DataFrame最后一列设为指定列行和并解决赋值警告问题
解决方案
方案1:直接读取Excel公式计算后的结果
你读不到W列的公式值是因为pandas默认没有开启读取公式计算结果的配置,修改read_excel的参数即可:
df = pd.read_excel(pathTarget + target, sheet_name=clas, engine='openpyxl', data_only=True)
加data_only=True参数后会直接读取公式运行后的实际值,不需要自己再计算求和,直接转csv即可。
方案2:自行计算行和赋值到新列
不需要循环遍历,pandas支持直接按行批量求和,一行代码即可完成整列赋值,不会触发警告:
df['your_score'] = df.loc[:, 'Week1':'Week19'].sum(axis=1)
axis=1指定按行维度求和,会自动对每一行的Week1到Week19列求和后赋值到对应行的your_score列,性能比循环遍历高很多。
如果确实需要按行循环操作(比如有其他自定义计算逻辑),不要用df.iloc[x]['your_score']这种链式索引写法,改成单次定位的写法即可避免警告:
for x in df.index: # 单步定位计算行和 row_sum = df.loc[x, 'Week1':'Week19'].sum() # 单步定位赋值,避免链式索引触发副本警告 df.loc[x, 'your_score'] = row_sum
内容的提问来源于stack exchange,提问作者Pedroski
相关产品推荐
相关产品推荐

