这是我分配的代码段np.nan
:
df['column1'] = pd.np.where(df5.column5.str.contains("ABC"), "GHI",
pd.np.where(df5.column5.str.contains("DEF"), "KLM", np.nan))
并且我想过滤掉'column1'为NaN的行。我尝试使用isnull()
和isna()
,但是这些没有用。在这里起作用的是以下内容:
df = df [df['column1'] != 'nan']
这意味着np.nan
被存储为字符串。为什么会这样呢?我该如何解决?
使用np.where
将创建一个numpy数组,在这种情况下将使用字符串和np.nan
。但是,运行类似
np.array(['a', np.nan])
将给出array(['a', 'nan'], dtype='<U3')
。此处np.nan
已转换为'nan'
。
在这种情况下,也会发生同样的情况,在不分配具有某些示例数据的列的情况下运行代码(如[tidakdiinginkan所注释的pd.np
更改为np
:]]
np.where(df5.column5.str.contains("ABC"), "GHI",
np.where(df5.column5.str.contains("DEF"), "KLM", np.nan))
给出:
array(['GHI', 'GHI', 'GHI', 'GHI', 'nan', 'nan', 'KLM', 'KLM'],
dtype='<U32')
您可以改用None
代替np.nan
:
df['column1'] = pd.np.where(df5.column5.str.contains("ABC"), "GHI",
pd.np.where(df5.column5.str.contains("DEF"), "KLM", None))
这将允许您按预期使用df['column1'].isnull()
。