You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 12:10:32