用零 python pandas 填充 nan

Nil*_*ilZ 5 python nan series pandas imputation

这是我的代码:

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)))
Run Code Online (Sandbox Code Playgroud)

我有 0 到 10 个事件列“event_0,event_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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请告诉我出了什么问题?您可以在图片中看到更改之前的数据框。

jpp*_*jpp 6

我不知道为什么会发生这种情况,因为我将所有这些列都设置为相同。

你的数据表明这正是尚未完成的事情。

根据您想要实现的目标,您有几种选择。

1.将所有非数字值转换为0

pd.to_numeric与以下一起使用errors='coerce'

df[col] = pd.to_numeric(df[col], errors='coerce').fillna(0)
Run Code Online (Sandbox Code Playgroud)

2. 将字符串 ('nan') 或空 (NaN) 值替换为 0

pd.Series.replace按照前面的方法使用:

df[col] = df[col].replace('nan', np.nan).fillna(0)
Run Code Online (Sandbox Code Playgroud)