Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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 如何正确地舍入数据帧列?_Python_Pandas_Dataframe - Fatal编程技术网

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的函数时,对参数值的行为产生了误解,我用“正确”这个词漏掉了要点,我想答案应该是一种更为通灵的方式。