Python 如何正确地舍入数据帧列?
我试图在一个数据帧中对两列进行取整。然而,我得到的结果与原来的是一样的。代码如下:Python 如何正确地舍入数据帧列?,python,pandas,dataframe,Python,Pandas,Dataframe,我试图在一个数据帧中对两列进行取整。然而,我得到的结果与原来的是一样的。代码如下: def lonlat_round(dataframe, decimal_places): dataframe[['lon','lat']] = dataframe[['lon','lat']].apply(pd.to_numeric) dataframe['lon'] = dataframe['lon'].round(decimal_places) dataframe['lat'] = d
def lonlat_round(dataframe, decimal_places):
dataframe[['lon','lat']] = dataframe[['lon','lat']].apply(pd.to_numeric)
dataframe['lon'] = dataframe['lon'].round(decimal_places)
dataframe['lat'] = dataframe['lat'].round(decimal_places)
return dataframe
dat = pd.DataFrame({'lon': [1.1, 2.2, 3.3], 'lat': [5.5, 6.6, 7.7]})
dat_new = lonlat_round(dataframe=dat, decimal_places=0)
dat_new == dat
这一切都是真的…为什么?如何更改值而不是外观?谢谢 您在函数中使用了一个引用,因此在调用
round
时,您还修改了传入的df:
In [7]:
dat
Out[7]:
lat lon
0 6 1
1 7 2
2 8 3
In [10]:
dat_new
Out[10]:
lat lon
0 6 1
1 7 2
2 8 3
如果您对传入的df进行了copy()
,那么您将看到现在比较显示所有值的False
:
In [11]:
def lonlat_round(df, decimal_places):
dataframe = df.copy()
dataframe[['lon','lat']] = dataframe[['lon','lat']].apply(pd.to_numeric)
dataframe['lon'] = dataframe['lon'].round(decimal_places)
dataframe['lat'] = dataframe['lat'].round(decimal_places)
return dataframe
dat = pd.DataFrame({'lon': [1.1, 2.2, 3.3], 'lat': [5.5, 6.6, 7.7]})
dat_new = lonlat_round(df=dat, decimal_places=0)
dat_new == dat
Out[11]:
lat lon
0 False False
1 False False
2 False False
您可以尝试这种方法
import pandas as pd
dat = pd.DataFrame({'lon': [1.1, 2.2, 3.3], 'lat': [5.5, 6.6, 7.7]})
#determine the columns and the corresponding round scale by a dictionary
dat = dat.round({'lon': 0, 'lat': 0})
结果将是:
dat=
lat lon
0 6.0 1.0
1 7.0 2.0
2 8.0 3.0
在调用
lonlat_round()
函数之前和之后,您是否尝试执行print(dat)
?因为您引用了源df,所以实际上源df和处理df都是same@MaxU对是的。@EdChum你能详细说明一下或者发布解决方案让我试试吗?OP知道如何对值进行舍入
,问题是当将df作为参数传递给引用传入DFORRY的函数时,对参数值的行为产生了误解,我用“正确”这个词漏掉了要点,我想答案应该是一种更为通灵的方式。