У меня фрейм данных содержит кортеж (lat, lon), но есть некоторые строки, содержащие кортеж nan. Как я могу их удалить или обнаружить?
Пример:
import pandas as pd
import numpy as np
df = pd.DataFrame(data = {'location': [1, 2, 3],
'coor': [(14.48847, 103.161477),
(14.970084, 103.062853),
(np.nan, np.nan)]})
location coor
0 A (14.48847, 103.161477)
1 B (14.970084, 103.062853)
2 C (nan, nan)
Я пытался.
df.isna()
location coor
0 False False
1 False False
2 False False
df.dropna()
location coor
0 A (14.48847, 103.161477)
1 B (14.970084, 103.062853)
2 C (nan, nan)
Но это совсем не работа. Должен ли я разделить кортеж на 2 столбца или есть способ справиться с этим? Любая помощь или руководство будут оценены.
вы можете попробовать фильтровать с помощью лямбда-функции
df[~df.coor.apply(lambda x: np.isnan(x[0]) & np.isnan(x[1]))]
# prints
location coor
0 1 (14.48847, 103.161477)
1 2 (14.970084, 103.062853)
Без применения ускорится
df[pd.DataFrame(df.coor.tolist()).notna().all(1)]
Out[361]:
coor location
0 (14.48847, 103.161477) 1
1 (14.970084, 103.062853) 2
Спасибо! Для меня это лучший ответ.
Спасибо! На самом деле я забываю, что могу использовать для этого приложение.