Заполните нан с нулевым питоном панды - PullRequest
0 голосов
/ 16 октября 2018

это мой код:

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 столбцов событий "event_0, event_1, ...". Когда я заполняю nan этим кодом, он заполняет все ячейки nan под всеми столбцами событий, чтобы0, но это не меняет event_0, который является первым столбцом этого выбора, и он также заполнен nan.

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

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)

enter image description here

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

1 Ответ

0 голосов
/ 17 октября 2018

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

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

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

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