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

Pandas如何将DataFrame中的所有数值替换为NaN

问题场景

你需要处理的DataFrame构造代码如下(注:原代码中pd.dataframe存在拼写错误,pandas的DataFrame类名首字母需大写,正确写法为pd.DataFrame):

import pandas as pd
import numpy as np

data = {'Region': ['Africa','Africa','Africa','Africa','Africa','Africa','Africa','Africa','Asia','Asia','Asia','Asia'],
         'Country': ['South Africa','South Africa','South Africa','South Africa','South Africa','South Africa','South Africa','South Africa','Japan','Japan','Japan','Japan'],
         'Product': ['ABC','ABC','ABC','ABC','XYZ','XYZ','XYZ','XYZ','DEF','DEF','DEF','DEF'],
         'Year': [2016, 2017, 2018, 2019,2016, 2017, 2018, 2019,2016, 2017, 2018, 2019],
         'Price': [500, 400, 0,450,750,0,0,890,0,0,415,0],
         'Quantity': [1200,1700,0,330,500,0,0,120,300,0,50,0],
         'Value': [600000,680000,0,148500,350000,0,0,106800,0,0,20750,0]}

df = pd.DataFrame(data)

需求为将Year、Price、Quantity、Value四列的所有数值统一替换为空值。

最优实现方法

直接对目标列批量赋值空值是效率最高的方案,属于pandas原生向量化操作,没有逐元素、逐行遍历的额外开销,即使是百万行级别的数据集也能毫秒级完成:

# 定义需要替换值的目标列列表
target_columns = ['Year', 'Price', 'Quantity', 'Value']
# 批量将目标列所有值设为NaN
df[target_columns] = np.nan

执行后可以得到如下结果,非目标列的原有文本数据会完整保留,目标列所有值均变为NaN:

Region       Country Product  Year  Price  Quantity  Value
0   Africa  South Africa     ABC   NaN    NaN       NaN    NaN
1   Africa  South Africa     ABC   NaN    NaN       NaN    NaN
2   Africa  South Africa     ABC   NaN    NaN       NaN    NaN
3   Africa  South Africa     ABC   NaN    NaN       NaN    NaN
4   Africa  South Africa     XYZ   NaN    NaN       NaN    NaN
5   Africa  South Africa     XYZ   NaN    NaN       NaN    NaN
6   Africa  South Africa     XYZ   NaN    NaN       NaN    NaN
7   Africa  South Africa     XYZ   NaN    NaN       NaN    NaN
8     Asia         Japan     DEF   NaN    NaN       NaN    NaN
9     Asia         Japan     DEF   NaN    NaN       NaN    NaN
10    Asia         Japan     DEF   NaN    NaN       NaN    NaN
11    Asia         Japan     DEF   NaN    NaN       NaN    NaN
  • 补充说明:如果不想导入numpy库,也可以直接使用pandas内置的空值类型pd.NA赋值,效果完全一致:
    df[target_columns] = pd.NA
    
  • 避坑提示:不要使用replace()、apply()、循环逐行赋值这类方法实现该需求,这类方法会产生大量额外性能损耗,数据量较大时执行速度会明显下降。

内容的提问来源于stack exchange,提问作者A.N.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:15:51