Преобразование столбцов строк в десятичной широте и долготе с пропуском значений nan с помощью pandas

#pandas #string #geography

#pandas #строка #география

Вопрос:

существует столбец фрейма данных pandas со значениями широты в виде строк

 0       47º 58,46 N
1        48º 06,8 N
2               NaN
3        47º 58,1 N
4        48º 05,0 N
  

код:

 parts = df["Latitud"].str.extract('(d )ºs(d*.d*).([N|S|E|W])', expand=True) #(d )ºs(d*.d*).(.)



df["latitude"] = (parts[0].astype(int)   parts[1].astype(float) / 60 ) * parts[3].map({'N':1, 'S':-1, 'E': 1, 'W':-1})
  

Ошибка:

 ValueError: cannot convert float NaN to integer
  

Как мне пропустить пустые значения NaN?

Ответ №1:

Давайте попробуем пропустить NaN значения, как было запрошено:

 # skip them here
notna = df['Latitud'].notna()

# extract the parts
parts = df.loc[notna, "Latitud"].str.extract('(d )ºs(d*.d*).([N|S|E|W])', expand=True) 

# update the data
df.loc[notna, 'latitude'] = (parts[0].astype(int)   parts[1].str.replace(',','.').astype(float) / 60 ) * parts[2].map({'N':1, 'S':-1, 'E': 1, 'W':-1})
  

Вывод:

        Latitud   latitude
0  47º 58,46 N  47.974333
1   48º 06,8 N  48.113333
2          NaN        NaN
3   47º 58,1 N  47.968333
4   48º 05,0 N  48.083333
  

Комментарии:

1. используемый код, но: «Ошибка значения: невозможно преобразовать значение NaN с плавающей запятой в целое число»