Pandas df.loc比较浮动条件永远不会奏效

时间:2017-06-30 17:03:17

标签: python pandas dataframe floating-point loc

df[['gc_lat', 'gc_lng']] = df[['gc_lat', 'gc_lng']].apply(pd.to_numeric, errors='ignore')
df_realty[['lat', 'lng']] = df_realty[['lat', 'lng']].apply(pd.to_numeric, errors='ignore')
 for index, row in df.iterrows():
        gc_lat = float(df.get_value(index,'gc_lat'))
        gc_lng = float(df.get_value(index, 'gc_lng'))
        latmax = gc_lat + 1/110.574*radius_km
        latmin = gc_lat - 1/110.574*radius_km
        longmax = gc_lng + 1/111.320*radius_km*cos(df.get_value(index,'gc_lat'))
        longmin = gc_lng - 1/111.320*radius_km*cos(df.get_value(index,'gc_lat'))
        print(latmax, latmin, longmax, longmin)
        print (gc_lat)
        print (gc_lng)
        print (df_realty.shape)
        subset = df_realty.loc[(df_realty['lat']<latmax) & (df_realty['lat']>latmin) & (df_realty['lng']>longmin) & (df_realty['lng'] <longmax)]
        print (subset.shape)
        print ('subset selected!')

打印

59.12412758664786 59.03369041335215 37.88659685779323 37.960157142206775
59.078909
37.923377
(290584, 3)
(0, 3)
subset selected!

所以我试图将Dataframe拆分为子集,但是我放入df.loc的条件永远不会有效!

df_realty中的数据没问题,已经过测试。

似乎我必须解释一些类型演员,但我已经制作了一个(pd.to_numeric)

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

找到解决方案

问题是longmax有时会变得小于longmin,因为cos有时会返回负浮动。

在cosinus面前放置abs()解决了这个问题