【发布时间】:2025-12-12 10:20:09
【问题描述】:
根据单独列中的 nan 值创建新列的最有效方法是什么(考虑到数据框非常大)
在OTW中,如果任何一列在其中一行中有NaN,那么新列的对应值应该是1
注意:列的 dtypes 可能是不同的对象,而不仅仅是整数/浮点数
X A B
1 2 3
4 NaN 1
7 8 9
3 2 NaN
5 NaN 2
应该给
X A B C
1 2 3 0
4 NaN 1 1
7 8 9 0
3 2 NaN 1
5 NaN 2 1
代码已尝试(感谢一些在线帮助):
df['C'] = np.where(np.any(np.isnan(df[['A', 'B']])), 1, 0)
但它会引发以下错误
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
这会返回一个空数据框(因为 A 和 B 列在单行中从来没有 NaN 值
df['C'] = np.where(np.any(pd.isnull(df[['A', 'B']])), 1, 0)
找到解决方法:
df['C1'] = np.where(np.isnan(df['A'].values), 1, 0)
df['C2'] = np.where(np.isnan(df['B'].values), 1, 0)
df['C'] = df[['C1','C2']].max(axis=1)
然后您可以删除C1 和C2
希望对你有帮助~
【问题讨论】:
-
试过了,返回一个空的数据框。我认为它在上面的 sn-p 中使用了 AND 运算符,它应该使用 OR
-
您的 df 中没有 A 列和 B 列
-
请检查新的编辑@WeNYoBen
-
数据类型是什么?
-
在我当前的用例中,日期时间
标签: python pandas numpy dataframe