如何在Pandas中为含指定字符串的列替换NaN为0
解决DataFrame指定列的NaN替换问题
问题分析
你的DataFrame列名是带时间后缀的incount - XX:XX,直接用df['incount']无法匹配列名,需要通过列名包含指定字符串筛选目标列,再替换其中的NaN为0。
注意事项
你的示例数据中用的是字符串'NaN',不是pandas默认的np.nan,需要先将其转为真正的缺失值(如果实际数据已经是np.nan可跳过此步骤)。
解决方案
方法一:筛选列名后批量替换
import pandas as pd import numpy as np # 构造示例数据 d = {'incount - 14:00': [1,'NaN', 1,1,'NaN','NaN','NaN','NaN',1], 'incount - 15:00': [2,1,2,'NaN','NaN','NaN',1,4,'NaN'], 'outcount - 14:00':[2,'NaN',1,1,1,1,2,2,1], 'outcount - 15:00':[2,2,1,1,'NaN',2,'NaN',1,1]} df = pd.DataFrame(data=d) # 转换字符串'NaN'为np.nan(实际数据若为np.nan可省略) df = df.replace('NaN', np.nan) # 筛选列名包含'incount'的列 incount_cols = df.columns[df.columns.str.contains('incount')] # 对目标列替换NaN为0 df[incount_cols] = df[incount_cols].fillna(0)
方法二:字典推导式+assign更新
如果你喜欢更简洁的链式写法,可以用字典推导式生成需要更新的列,通过assign方法修改DataFrame:
# 同样先处理字符串'NaN'(若需要) df = df.replace('NaN', np.nan) # 批量更新目标列 df = df.assign(**{col: df[col].fillna(0) for col in df.columns if 'incount' in col})
效果验证
执行后,所有列名含incount的列中的缺失值会被替换为0,outcount相关列的缺失值保持原样。
内容的提问来源于stack exchange,提问作者Dizzy
相关产品推荐
相关产品推荐

