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

如何使用Pandas选择性dropna,使DataFrame各列独立去除NaN?

解决DataFrame中单独处理每列NaN值的问题

我明白你的需求了——你不想因为某一列存在NaN就删除整行,而是希望把两列的有效数据尽量按顺序对应起来,多余的行保留对应列的空值。下面是针对这个需求的具体解决方案:

1. 先还原你的示例DataFrame

首先我们用代码创建你提供的示例数据:

import pandas as pd
import numpy as np

data = {
    'Advertising': [np.nan, 71.0, 65.0, 14.0, 76.0, np.nan, np.nan, 73.0, 85.0, 17.0, np.nan],
    'No Advertising': [7.0, np.nan, np.nan, np.nan, np.nan, 36.0, 9.0, np.nan, np.nan, np.nan, 103.0]
}
df = pd.DataFrame(data)

2. 核心解决方案:提取每列有效数据后合并

我们可以分别提取两列的非NaN值,重置它们的索引后再合并,这样就能让两列的有效数据一一对应,直到其中一列的数据耗尽,剩下的行另一列自动填充NaN:

# 提取每列的非NaN值并重置索引,确保从0开始连续编号
adv_valid = df['Advertising'].dropna().reset_index(drop=True)
no_adv_valid = df['No Advertising'].dropna().reset_index(drop=True)

# 按列合并两个有效数据序列
result_df = pd.concat([adv_valid, no_adv_valid], axis=1)

运行这段代码后,result_df的内容就是你想要的结果:

Advertising  No Advertising
0         71.0             7.0
1         65.0            36.0
2         14.0             9.0
3         76.0           103.0
4         73.0             NaN
5         85.0             NaN
6         17.0             NaN

3. 可选:将NaN显示为空字符串

如果你希望把NaN显示成空字符串(和你给出的期望输出格式完全一致),可以用fillna('')调整显示效果(注意这会把数值列转为object类型):

display_df = result_df.fillna('')
print(display_df)

输出效果:

Advertising No Advertising
0         71.0            7.0
1         65.0           36.0
2         14.0            9.0
3         76.0          103.0
4         73.0               
5         85.0               
6         17.0               

这个方法的优势在于完全保留了每列的所有有效数据,不会因为某一列的缺失值丢失另一列的有用信息,完美匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:27:34