如何将Pandas DataFrame指定列的NaN值设为1?
解决Pandas指定列NaN值填充为1的问题
问题原因分析
你之前的代码失效主要有两个核心问题:
- 列选取语法错误:
df['guests', 'bedrooms', 'beds', 'bathrooms']不是Pandas选取多列的正确写法,单层方括号传入多个元素会被解析为元组,无法匹配普通列名,导致根本没选中目标列。 - 链式索引的副本问题:第二种方法中,
df[列列表]可能返回原DataFrame的副本,此时inplace=True只会修改副本,原DataFrame不会同步更新。
正确解决方案
方法1:双层方括号选列并赋值
这是最直接的方式,确保选中目标列并将填充结果覆盖原数据:
import pandas as pd import numpy as np # 填充指定列的NaN为1 df[['guests', 'bedrooms', 'beds', 'bathrooms']] = df[['guests', 'bedrooms', 'beds', 'bathrooms']].fillna(1)
方法2:用loc索引避免副本问题
loc索引更明确,能确保操作的是原DataFrame的视图(而非副本),避免赋值失效:
df.loc[:, ['guests', 'bedrooms', 'beds', 'bathrooms']] = df.loc[:, ['guests', 'bedrooms', 'beds', 'bathrooms']].fillna(1)
针对object类型列的优化处理
由于guests和bedrooms是object类型,直接填充整数1会导致列内混合字符串与数值。如果需要统一为数值类型,可先转换列类型再填充:
# 将object列转为数值类型(无法转换的值会被设为NaN) df['guests'] = pd.to_numeric(df['guests'], errors='coerce') df['bedrooms'] = pd.to_numeric(df['bedrooms'], errors='coerce') # 再填充NaN为1 df[['guests', 'bedrooms', 'beds', 'bathrooms']] = df[['guests', 'bedrooms', 'beds', 'bathrooms']].fillna(1)
内容的提问来源于stack exchange,提问作者Lewis-010
相关产品推荐
相关产品推荐

