【发布时间】:2020-05-22 17:53:47
【问题描述】:
这是我的代码:
import pandas as pd
import numpy as np
df = pd.DataFrame({ 'var1': ['a', 'b', 'c',np.nan, np.nan],
'var2': [1, 2, np.nan , 4, np.nan]
})
conditions = [
(not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"]))),
(pd.isna(df["var1"])) & (pd.isna(df["var2"]))]
choices = ["No missing", "Both missing"]
df['Result'] = np.select(conditions, choices, default=np.nan)
输出:
File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\core\generic.py", line 1478, in __nonzero__
f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
问题出在(not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"]))) 行。当var1 和var2 不是NaN 值时,此行应该给出TRUE。这里的问题在于否定,因为没有否定的条件没有问题。
问题:如何纠正(not(pd.isna(df["var1"]))) & (not(pd.isna(df["var2"]))) 行,以防var1 和var2 都不是NaN 值,条件应该给出TRUE? p>
【问题讨论】:
-
为什么不改用
df.notna():conditions = [ (df["var1"].notna() & df['var2'].notna()), (pd.isna(df["var1"])) & (pd.isna(df["var2"]))] -
@anky_91 成功了,谢谢。对于这种特殊情况,这是更好的方法。但我也对如何正确使用否定以备将来使用感兴趣。我的否定有什么问题?
-
您可以阅读this 答案以更好地解释为什么您的否定不起作用
标签: python pandas numpy nan negation