Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas.round()未按需要舍入_Python_Pandas - Fatal编程技术网

Python Pandas.round()未按需要舍入

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的巨大数据框中得到了下面的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 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()