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
相关产品推荐
相关产品推荐

