数组中的Numpy NaN格式不被视为null

时间:2015-12-01 13:51:40

标签: python numpy pandas

我正在尝试使用以下代码填充数据框:

df = pd.DataFrame(data=np.random.choice([1, np.nan], size=5))


0     1  
1     1  
2   NaN  
3     1  
4     1   

然后:

df[df[0].isnull()]

2   NaN

到目前为止,这么好。但是,如果我正在修改1到' 1'事情变得奇怪(imo)。

df = pd.DataFrame(data=np.random.choice(['1', np.nan], size=5))

0    1  
1    1  
2    1  
3    1  
4  nan  

isnull出现问题

df[df[0].isnull()]

Empty DataFrame  
Columns: [0]  
Index: []

如何让nan(这是一个字符串)表现得像NaN? 我希望能够快速过滤我的数据帧中的所有null /非null值。

感谢。

1 个答案:

答案 0 :(得分:1)

NaN是一个在处理数字时有意义的概念,而不是字符串。当您使用'1'创建数据框时,Pandas会推断该列的类型:str,哪个IMO是正确的。因此,它会将NaN值转换为字符串表示形式。

请注意,例如,如果您说:

df = pd.DataFrame(data=np.random.choice(['1', 2], size=5))

2也将转换为字符串。因为,Pandas再次推断整个列的字符串类型。

但是,您仍然可以使用建议的数据框轻松过滤:

df = pd.DataFrame(data=np.random.choice(['1', np.nan], size=5))
df[df[0] == 'nan']