Python 用零填充nan

Python 用零填充nan,python,pandas,nan,series,imputation,Python,Pandas,Nan,Series,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))) 我有0到10个事件列“事件0,事件1,…” 当我用此代码填充nan时,它会将所有事件列下的所有nan单元格填充为0,但它不会更改该选择的第一列event_0,它也由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。将所有非数值转换为0

使用
pd.\u numeric
errors='concurve'
一起使用:

df[col] = pd.to_numeric(df[col], errors='coerce').fillna(0)
2。用0替换字符串('nan')或空(nan)值

使用
pd.Series.替换之前的方法:

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

您确定
event\u 0
中的
nan
值为空,而不是字符串
'nan'
?显然,event\u 0值为nan,而在其他值下为nan。我不知道为什么会这样,因为我把所有的专栏都做了相同的。现在我的解决方案是:
对于df:if col.startswith('event'):df[col]=df[col].map(lambda x:re.sub(“\D”,”,str(x)))df[col]=df[col]。替换(“”,np.nan)df[col]。fillna(0,inplace=True)