применить функцию к столбцу dataframe, имеющему lat-long, и удалить строки для недопустимого lat-long - PullRequest
0 голосов
/ 03 апреля 2020

У меня есть 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)

Я хочу удалить запись из df1 , если значение lat_long равно Я делаю это, как показано ниже, но занимаю слишком много времени.

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- "Широта" и "Долгота" и заполнить соответствующие значения.

1 Ответ

0 голосов
/ 03 апреля 2020

Я бы поступил следующим образом:

  1. Определите функцию validate_lat_long, которая возвращает кортеж с плавающей точкой, если значения широты / долготы верны. Я предполагаю, что это связано с проверкой того, что значения находятся в ожидаемых интервалах (от -90 до 90 для широты и т. Д. c). Функция должна возвращать np.nan, если значения не верны.
  2. Создать новый столбец с правильными значениями следующим образом:
df1["validated_lat_long"] = df1["lat_long"].apply(validate_lat_long)
Наконец, чтобы удалить недопустимые значения, используйте dropna в новом столбце и, возможно, создайте новый фрейм данных, если вам нужно сохранить предыдущую работу:
new_df = df1.dropna(subset=["validated_lat_long"])

Ваш код скорее всего медленный, потому что он перебирает строки данных. Применение функции с df.apply() должно значительно ускорить процесс. Также я надеюсь, что вы можете проверять числа с плавающей точкой вместо поиска регулярного выражения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...