You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python中查找DataFrame空列并提取为列表及isna报错排查

问题1:如何在Python中查找DataFrame中的空列,并将它们提取为列表?

首先得明确下你说的“空列”是哪种情况——是整列所有值都是NaN,还是只要包含至少一个NaN就算?我两种场景都给你整理了实现方式:

场景1:提取所有值都是NaN的空列

可以结合isna()all()方法定位全空列,再把列名转成列表:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({
    'col1': [1, 2, 3],
    'col2': [pd.NA, pd.NA, pd.NA],
    'col3': [None, 5, None],
    'col4': [pd.NA, pd.NA, pd.NA]
})

# 筛选全空列并转成列表
empty_cols = [col for col in df.columns if df[col].isna().all()]
print(empty_cols)  # 输出: ['col2', 'col4']

场景2:提取包含至少一个NaN值的列

把上面的all()换成any()就能实现:

cols_with_nan = [col for col in df.columns if df[col].isna().any()]
print(cols_with_nan)  # 输出: ['col2', 'col3', 'col4']

问题2:为什么使用df.isna().any()会报错AttributeError: 'DataFrame' object has no attribute 'isna'

这个坑很多老版本pandas用户都踩过!原因很简单:你的pandas版本太低了isna()方法是在pandas 0.21.0版本才正式引入的,如果你用的是更早的版本,自然会提示这个属性不存在。

给你两个解决办法:

  • 方案一(推荐):升级pandas版本
    在终端执行这条命令就行:
    pip install --upgrade pandas
    
  • 方案二:用旧版本替代方法isnull()
    旧版本里isnull()和新版本isna()的功能完全一致,把代码改成这样就能正常运行:
    df.isnull().any()
    

你可以先查下自己的pandas版本确认下:

print(pd.__version__)

如果版本号小于0.21.0,就按上面的方法调整吧~


内容的提问来源于stack exchange,提问作者user9238790

火山引擎 最新活动