在熊猫数据框中检查无
Posted
技术标签:
【中文标题】在熊猫数据框中检查无【英文标题】:Check for None in pandas dataframe 【发布时间】:2017-12-29 11:48:04 【问题描述】:我想查找在数据框中找到 None 的位置。
pd.DataFrame([None,np.nan]).isnull()
OUT:
0
0 True
1 True
isnull() 查找 numpy Nan 和 None 值。
我只想要 None 值而不是 numpy Nan。有没有更简单的方法可以在不循环数据帧的情况下做到这一点?
编辑: 阅读 cmets 后,我意识到在我的工作中的数据框中还包含字符串,因此 None 没有被强制转换为 numpy Nan。所以 Pisdom 给出的答案是有效的。
【问题讨论】:
Afaik,这在 Pandas 中是不可能的:Pandas 将None
s 视为缺失数据,并将它们(等效于)NaN。即使通过“循环遍历数据框”,您也无法区分 None
和 NaN
。请参阅documentation on missing data。
您可能需要重新考虑您的问题,看看您是否真的需要区分 NaN 和 None
。或者,您可以引入一个(布尔)列,指示值是None
还是浮点值(包括NaN
);又名面具。
【参考方案1】:
您可以使用applymap
和lambda
来检查element is None
是否如下,(构造一个不同的示例,如您原来的示例,None
被强制转换为np.nan
,因为数据类型是float
,您将需要一个object
类型列来按原样保存None
,或者按照@Evert 的评论,None
和NaN
在数字类型列中无法区分):
df = pd.DataFrame([[None, 3], ["", np.nan]])
df
# 0 1
#0 None 3.0
#1 NaN
df.applymap(lambda x: x is None)
# 0 1
#0 True False
#1 False False
【讨论】:
此 only 有效,因为您使用的是空字符串,因此更改了 dtype;将字符串更改为任意数字(整数或浮点数),None
将更改为 NaN
。
@Evert 是的。我添加了 None
只能存在于 object 类型列中的注释。【参考方案2】:
如果你想得到每一行的真/假,你可以使用下面的代码。以下是以下 DataFrame 的结果示例:
df = pd.DataFrame([[None, 3], ["", np.nan]])
df
# 0 1
#0 None 3.0
#1 NaN
如何查看None
可用:.isnull()
>>> df[0].isnull()
0 True
1 False
Name: 0, dtype: bool
可用:.apply
==
或 is
None
>>> df[0].apply(lambda x: x == None)
0 True
1 False
Name: 0, dtype: bool
>>> df[0].apply(lambda x: x is None)
0 True
1 False
Name: 0, dtype: bool
可用:.values
==
None
>>> df[0].values == None
array([ True, False])
不可用:is
或 ==
>>> df[0] is None
False
>>> df[0] == None
0 False
1 False
Name: 0, dtype: bool
不可用:.values
is
None
>>> df[0].values is None
False
如何查看np.nan
可用:.isnull()
>>> df[1].isnull()
0 False
1 True
Name: 1, dtype: bool
可用:np.isnan
>>> np.isnan(df[1])
0 False
1 True
Name: 1, dtype: bool
>>> np.isnan(df[1].values)
array([False, True])
>>> df[1].apply(lambda x: np.isnan(x))
0 False
1 True
Name: 1, dtype: bool
不可用:is
或 ==
np.nan
>>> df[1] is np.nan
False
>>> df[1] == np.nan
0 False
1 False
Name: 1, dtype: bool
>>> df[1].values is np.nan
False
>>> df[1].values == np.nan
array([False, False])
>>> df[1].apply(lambda x: x is np.nan)
0 False
1 False
Name: 1, dtype: bool
>>> df[1].apply(lambda x: x == np.nan)
0 False
1 False
Name: 1, dtype: bool
【讨论】:
以上是关于在熊猫数据框中检查无的主要内容,如果未能解决你的问题,请参考以下文章