Pandas df.loc comparing-floats-condition 从不工作
Pandas df.loc comparing-floats-condition never works
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)
有什么建议吗?
找到解决方案
问题是 longmax 有时变得比 longmin 小,因为 cos 有时 returns 负浮点数。
将 abs() 放在 cosinus 前面解决了问题
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)
有什么建议吗?
找到解决方案
问题是 longmax 有时变得比 longmin 小,因为 cos 有时 returns 负浮点数。
将 abs() 放在 cosinus 前面解决了问题