#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].