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

Pandas实现:当DataFrame指定列值为NaN时提取另一列值至新列

解决DataFrame新增State列的NaN判断问题

我来帮你搞定这个问题!你之前的代码没成功,核心原因是NaN是特殊的浮点值,不能用== np.NaN直接判断——因为任何和NaN的比较都会返回False,包括NaN和自己比。

正确的解决方案

这里有两种靠谱的写法,都能实现你的需求:

方法1:用np.where结合Pandas的isna()

import numpy as np
import pandas as pd

# 先还原你的DataFrame(方便测试)
df = pd.DataFrame({
    'a': ['Alabama[edit]', 'Auburn (Auburn University)[1]', 'Florence (University of', 'Jacksonville (Jacksonville State', 'Livingston (University of'],
    'b': [np.nan, '', '', '', ''],
    'c': [np.nan, np.nan, np.nan, np.nan, np.nan]
})

# 新增State列的正确代码
df['State'] = np.where(df['b'].isna(), df['a'], np.nan)

方法2:用loc定位赋值

先把State列初始化为全NaN,再给符合条件的行赋值:

df['State'] = np.nan
df.loc[df['b'].isna(), 'State'] = df['a']

为什么原来的代码失效?

你写的df['b'] == np.NaN会返回一个全False的Series,因为NaN的特性是不等于任何值,包括它自己。Pandas提供了isna()(或等价的isnull())函数来专门检测缺失值,这才是正确的判断方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:25:04