Python Pandas.round()未按需要舍入
我从一个有很多id的巨大数据框中得到了下面的id,我特别选择了这个来告诉你问题出在哪里Python Pandas.round()未按需要舍入,python,pandas,Python,Pandas,我从一个有很多id的巨大数据框中得到了下面的id,我特别选择了这个来告诉你问题出在哪里 id year anual_jobs anual_wage 874180 20001150368 2010 10.5 1071.595917 在这之后,我开始编码 df.anual_jobs= df.anual_jobs.round() 我得到了这个错误,但代码仍然在运行 A value is trying to be set
id year anual_jobs anual_wage
874180 20001150368 2010 10.5 1071.595917
在这之后,我开始编码
df.anual_jobs= df.anual_jobs.round()
我得到了这个错误,但代码仍然在运行
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead
See the caveats in the documentation: http://pandas.pydata.org/pandas-
docs/stable/indexing.html#indexing-view-versus-copy
self[name] = value
我的结果是:
id year anual_jobs anual_wage
874180 20001150368 2010 10.0 1071.595917
当我想把所有的作业四舍五入到11.0而不是10.0时,如果你想要的是半整数,请使用十进制
from decimal import Decimal, ROUND_HALF_UP
print(Decimal(10.5).quantize(0, ROUND_HALF_UP))
print(Decimal(10.2).quantize(0, ROUND_HALF_UP))
>> 11
>> 10
As@cᴏʟᴅsᴘᴇᴇᴅ 指出,之所以会出现这种情况,是因为numpy将半个值舍入为最接近的偶数整数(请参阅文档和更一般的讨论),而pandas在其大部分数值工作中都使用numpy。您可以通过四舍五入“老式”方式解决此问题: 或
As@cᴏʟᴅsᴘᴇᴇᴅ 指出,您还可以通过将数据帧创建为独立帧而不是旧数据帧上的视图来解决切片分配警告,即,在将值分配到数据帧之前,在某个点执行以下操作:
df = df.copy()
简而言之,您创建了
df
,方法是将其他一些数据帧子集,分配一个视图。只要做df=df.copy()
就可以了。@cᴏʟᴅsᴘᴇᴇᴅ: 虽然SettingWithCopyWarning是一个问题,应该加以修复,但分配实际上是在修改数据帧。问题是为什么它是向下舍入而不是向上舍入。@user2357112;哎呀,我还以为这一轮应用到了错误的列上,它不起作用了。好的,那是因为numpy舍入到最接近的偶数整数。让我重新打开,如果你愿意,你可以回答。最好只留一个在这里
import pandas as pd
df.anual_jobs = pd.np.floor(df.anual_jobs + 0.5)
df = df.copy()