#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)