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)