如何让Pandas按列类型自动填充DataFrame中的NaN值
按列类型自动填充Pandas DataFrame的NaN值
可以通过映射列数据类型到对应填充值的方式,让Pandas自动识别列类型并完成批量填充,无需手动逐个指定列。以下是两种实用实现方式:
方法一:类型映射字典(高效批量处理)
先定义数据类型与填充值的对应规则,再生成每列的填充参数,最后调用fillna()完成填充:
示例代码
import pandas as pd import numpy as np # 构造测试数据 df = pd.DataFrame({ "Name": ["Alice", np.nan, "Bob", np.nan], "Age": [25, np.nan, 30, np.nan], "Score": [90.5, np.nan, 85.0, np.nan], "Is_Student": [True, np.nan, False, np.nan] }) # 将Name列转为Pandas专用string类型(比object类型更准确识别字符串列) df["Name"] = df["Name"].astype("string") # 定义类型-填充值映射规则(可根据需求扩展) fill_rules = { "string": "", # 字符串列填充空字符串 "int64": 0, # 整数列填充0 "float64": 0.0, # 浮点数列填充0.0 "boolean": False # 布尔列填充False } # 为每列生成对应填充值 fill_values = {col: fill_rules[str(df[col].dtype)] for col in df.columns} # 执行填充 filled_df = df.fillna(fill_values)
方法二:apply逐列判断(灵活扩展)
通过apply()遍历每一列,根据列的dtype动态选择填充逻辑,适合需要复杂判断的场景:
示例代码
import pandas as pd import numpy as np # 构造测试数据(同方法一) df = pd.DataFrame({ "Name": ["Alice", np.nan, "Bob", np.nan], "Age": [25, np.nan, 30, np.nan], "Score": [90.5, np.nan, 85.0, np.nan], "Is_Student": [True, np.nan, False, np.nan] }) df["Name"] = df["Name"].astype("string") # 定义按类型填充的函数 def fill_col_by_dtype(series): dtype_str = str(series.dtype) if "string" in dtype_str: return series.fillna("") elif "int" in dtype_str or "float" in dtype_str: return series.fillna(0) elif "bool" in dtype_str: return series.fillna(False) # 其他类型(如datetime)可自行添加规则 else: return series # 逐列应用填充逻辑 filled_df = df.apply(fill_col_by_dtype, axis=0)
注意事项
- 若使用旧版Pandas的
object类型存储字符串,建议先转为string专用类型,避免类型识别误差; - 支持扩展填充规则,比如对
datetime64类型填充默认日期(如pd.Timestamp("1900-01-01")); - 对于Nullable类型(如带空值的
Int64整数类型),需在fill_rules中添加对应的dtype映射(如"Int64": 0)。
内容的提问来源于stack exchange,提问作者user16893175
相关产品推荐
相关产品推荐

