Заполните nan пандами с нулевым питоном

#python #pandas #dataframe #nan

#питон #панды #nan #Серии #вменение

Вопрос:

это мой код:

 for col in df:  if col.startswith('event'):  df[col].fillna(0, inplace=True)  df[col] = df[col].map(lambda x: re.sub("D","",str(x)))  

У меня есть столбец событий от 0 до 10 «событие_0, событие_1,…» Когда я заполняю nan этим кодом, он заполняет все ячейки nan во всех столбцах событий до 0, но не изменяет event_0, который является первым столбцом этого выбора, и он также заполняется nan.

Я сделал эти столбцы из столбца «события» со следующим кодом:

 event_seperator = lambda x: pd.Series([i for i in  str(x).strip().split('n')]).add_prefix('event_') df_events = df['events'].apply(event_seperator) df = pd.concat([df.drop(columns=['events']), df_events], axis=1)  

введите описание изображения здесь

Пожалуйста, скажите мне, что случилось? вы можете увидеть кадр данных перед изменением на картинке.

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

1. Вы уверены, что эти nan значения в event_0 являются нулевыми, а не строкой 'nan' ?

2. По-видимому, значения event_0 были nan , в то время как в других значениях было NaN . Я не знаю, почему это произошло, так как я сделал все эти колонки одинаковыми. Так что мое решение сейчас: for col in df: if col.startswith('event'): df[col] = df[col].map(lambda x: re.sub("D","",str(x))) df[col] = df[col].replace('', np.nan) df[col].fillna(0, inplace=True)

Ответ №1:

Я не знаю, почему это произошло, так как я сделал все эти колонки одинаковыми.

Ваши данные свидетельствуют о том, что именно этого не было сделано.

У вас есть несколько вариантов в зависимости от того, чего вы пытаетесь достичь.

1. Преобразуйте все нечисловые значения в 0

Используйте pd.to_numeric с errors='coerce' :

 df[col] = pd.to_numeric(df[col], errors='coerce').fillna(0)  

2. Замените строковые (‘nan’) или нулевые (NaN) значения на 0

Используйте pd.Series.replace с последующим использованием предыдущего метода:

 df[col] = df[col].replace('nan', np.nan).fillna(0)