замените NAN или пробел на строку pandas dataframe

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

У меня есть фрейм данных pandas. В одном из столбцов (‘Q8’) этого фрейма данных некоторые строки пусты. Я хотел бы заменить эти пустые ячейки строкой (‘ss’). Я хочу выполнить эту замену с условием. Это условие заключается в том, что если строка в столбце (‘Q7’) равна (‘Я студент’), а ячейка в этой строке в столбце (‘Q8’) пуста, замените пустую ячейку столбца (‘Q8’) на ‘ss’.

Это код, который я написал для него:

 for xx in range(0,len(df['Q8'])):
    if df['Q8'][xx]==np.nan:
       if df['Q7'][xx]=='I am a student':
           df['Q8'][xx].replace('', 'ss', regex=True)
  

но он не может найти ни одного np.nan с первого if!!

Ответ №1:

Вместо этого используйте маскировку:

 df.loc[(df['Q7'] == 'I am a student') amp; (df['Q8'].isna()), 'Q8'] = 'ss'
  

Вы также можете использовать fillna :

 df.loc[df['Q7'] == 'I am a student', 'Q8'] = df.loc[df['Q7'] == 'I am a student', 'Q8'].fillna('ss')
  

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

1. @CFD и обратите внимание на использование функции isna () для поиска пропущенных значений, которая работает с разными типами данных.

2. Почему мы должны ставить ‘Q8’ в конце первого метода?

3.@CFD потому что нам нужно замаскировать в двух измерениях: мы хотим изменить только ячейки, которые принадлежат строкам, где df[Q7] есть значение 'I am a student' , и столбцам, где df[Q8] равно null.

4. @CFD кроме того, правильный синтаксис для использования индексатора .loc таков: df.loc[row_indexer,column_indexer].