Почему fillna не работает со строковыми значениями?

#string #numpy #dataframe #nan #fillna

#строка #тупой #фрейм данных #nan #филлна

Вопрос:

У меня есть простые данные, как показано ниже. Я пытаюсь заполнить содержимое внутри, но это не работает

кадр , подобный этому;

 import pandas as pd
import numpy as np

V1 = np.array([1,2,6, np.nan, 7, 1, np.NaN, 9,15])
V4 = np.array(['IT','IK', np.NaN, 'IK','IK','IK','IK','IT','IT'])
df = pd.DataFrame({'sl': V1,
               'departman': V4})

df
 

дает мне:

     sl  departman
0   1.0 IT
1   2.0 IK
2   6.0 nan
3   NaN IK
4   7.0 IK
5   1.0 IK
6   NaN IK
7   9.0 IT
8   15.0IT
 

После того, как я написал это;

 df['departman'].fillna(df.departman.mode()[0] )
 

Выдает:

 0     IT
1     IK
2    nan
3     IK
4     IK
5     IK
6     IK
7     IT
8     IT
Name: departman, dtype: object
 

Ответ №1:

Я помню, что это однажды меня беспокоило в процессе производства. Ваш np.nan файл преобразуется в строку "nan" при создании фрейма данных. Смотрите с:

 df.loc[2, 'departman']
 

и вы получите 'nan' . Вам нужно преобразовать строку обратно в np.nan или использовать loc:

 mask = df['departman'] == 'nan'
 

Вывод:

      sl departman
0   1.0        IT
1   2.0        IK
2   6.0        IK
3   NaN        IK
4   7.0        IK
5   1.0        IK
6   NaN        IK
7   9.0        IT
8  15.0        IT
df.loc[mask, 'departman'] = df.loc[~mask, 'departman'].mode()[0]