[英]How to round dataframe columns properly?
我正在嘗試在數據框中舍入兩列。 但是,我得到的結果與原始結果相同。 代碼如下:
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
並且顯示所有True ...這是為什么? 如何更改值而不是外觀? 謝謝!
您在函數中使用了一個引用,因此在進行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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.