求助:如何在DataFrame中排除lag列,将其余列的NaN值填充为"Not Available"
解决DataFrame指定列填充NaN的问题
你的问题出在对副本操作而非原DataFrame上!当你用mydataset_df[mydataset_df.columns.difference(['lag'])]或者loc[:, mydataset_df.columns != 'lag']选择列时,pandas返回的是原DataFrame的一个副本,后续的fillna(inplace=True)只会修改这个副本,原DataFrame完全没变化。
这里给你两种简单有效的解决方案:
方案1:直接赋值回原DataFrame的对应列
通过loc选中需要填充的列,将填充后的结果直接赋值回去,确保修改作用在原DataFrame上:
# 方法A:用difference排除lag列 cols_to_fill = mydataset_df.columns.difference(['lag']) mydataset_df.loc[:, cols_to_fill] = mydataset_df.loc[:, cols_to_fill].fillna("Not Available") # 方法B:用!=筛选列 cols_to_fill = mydataset_df.columns != 'lag' mydataset_df.loc[:, cols_to_fill] = mydataset_df.loc[:, cols_to_fill].fillna("Not Available")
方案2:用fillna的subset参数(更简洁)
fillna本身支持subset参数,直接指定要填充的列子集,一步到位:
mydataset_df.fillna( value="Not Available", subset=mydataset_df.columns.difference(['lag']), inplace=True )
或者用!=的方式生成列列表:
mydataset_df.fillna( value="Not Available", subset=mydataset_df.columns[mydataset_df.columns != 'lag'], inplace=True )
这样就能完美实现:保留lag列的原样,将其他所有列的NaN值填充为"Not Available"。
内容的提问来源于stack exchange,提问作者Stefano Puccini
相关产品推荐
相关产品推荐

