用零个 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_numericerrors='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的主要内容,如果未能解决你的问题,请参考以下文章

用零填充缺失的用户输入

用零填充字符串的更好方法[重复]

用零填充数字的嵌套 IF [重复]

语法错误:创建一个用零填充的二维列表

用零填充个位数

用零并行填充 std::vector