用零个 python pandas 填充 nan
Posted
技术标签:
【中文标题】用零个 python pandas 填充 nan【英文标题】:Fill nan with zero python pandas 【发布时间】:2019-03-21 00:24:20 【问题描述】:这是我的代码:
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 填充。
我使用以下代码从“事件”列中创建了这些列:
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)
请告诉我有什么问题吗?您可以在图片中更改之前看到数据框。
【问题讨论】:
您确定event_0
中的那些nan
值是null 而不是字符串'nan'
?
显然 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') 或 null (NaN) 值替换为 0
使用pd.Series.replace
后跟上一个方法:
df[col] = df[col].replace('nan', np.nan).fillna(0)
【讨论】:
以上是关于用零个 python pandas 填充 nan的主要内容,如果未能解决你的问题,请参考以下文章