我有一个datafrme df1,如下所示:lat-long可以重复
miles uid lat_long
12 235 (45,67)
13 234 (41.09,67)
14 233 (34,55)
15 236 (12.23,65.78)
16 239 (27,34)
如果lat_long值无效,我想从df1中删除条目。我像下面这样进行操作,但是花费了太多时间。
all_lat_long = df1["lat_long"].tolist(). #list of tuples
def lat_long_check(each_coordnts):
match = re.match('^\((?P<lat>-?\d*(.\d+)),(?P<long>-?\d*(.\d+))\)$',
str(each_coordnts)) #find invalid lat-long
if match is None:
idx = df1[df1['lat_long'] == each_coordnts].index
df1.drop(idx,inplace=True)
for each_coordnts in all_lat_long:
lat_long_check(each_coordnts)
对于1M条记录,有没有有效的方法?删除错误的经纬度条目后,我想在df1-“ Latitude”和“ Longitude”的末尾填充两个新列,并填充相应的值。
我将进行如下操作:
validate_lat_long
,如果纬度/经度值正确,该函数将返回一个浮点元组。我认为这与检查值是否在预期间隔内有关(纬度为-90到90等)有关。如果值不正确,该函数应返回np.nan
。df1["validated_lat_long"] = df1["lat_long"].apply(validate_lat_long)
dropna
,并可能创建一个新的数据框:new_df = df1.dropna(subset=["validated_lat_long"])
您的代码很可能很慢,因为它会在数据帧行上进行迭代。用df.apply()
应用功能应该可以合理地加快速度。我也希望您可以检查浮点数而不是搜索正则表达式。