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

Pandas如何基于指定列删除含空值的行

Pandas如何基于指定列删除含空值的行

嗨,我来帮你搞定这个问题!先还原一下你给出的示例数据:

AB
Cell 1np.nan
Cell 2np.nan
np.nanCell 3
Cell 4Cell 4

你想删除B列包含np.nan的行,先说说你写的两段代码存在的问题:

  • 代码#1:df = df[df['B'] != np.nan],这个写法完全无效。因为np.nan有个特殊性质——它不等于任何值,包括它自己,所以df['B'] != np.nan会返回全False的布尔序列,最后得到的是空DataFrame。
  • 代码#2:这段代码没写完,逻辑不完整,没法正确实现删除操作。

接下来给你两种靠谱的解决方案:

方法一:用dropna()(推荐,最简洁直观)

这是Pandas专门用来删除空值行/列的方法,指定subset参数就能只针对某一列判断空值:

import pandas as pd
import numpy as np

# 先构造示例数据
data = {'A': ['Cell 1', 'Cell 2', np.nan, 'Cell 4'],
        'B': [np.nan, np.nan, 'Cell 3', 'Cell 4']}
df = pd.DataFrame(data)

# 删除B列含空值的行
df = df.dropna(subset=['B'])

执行后得到的结果就是B列无空值的行:

AB
np.nanCell 3
Cell 4Cell 4

方法二:用notna()过滤行

notna()会返回布尔序列,标记每行是否为非空值,用它来索引DataFrame就能保留符合条件的行:

df = df[df['B'].notna()]

这个方法和dropna的效果完全一致,你可以根据自己的习惯选择。

总结一下:处理Pandas里的空值,一定要用专门的isna()/notna()函数或者dropna()方法,别直接用==!=np.nan比较,不然很容易踩坑哦~

备注:内容来源于stack exchange,提问作者Task

火山引擎 最新活动