簡體   English   中英

如何正確舍入數據框列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM