在熊猫数据框中检查无

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 将 Nones 视为缺失数据,并将它们(等效于)NaN。即使通过“循环遍历数据框”,您也无法区分 NoneNaN。请参阅documentation on missing data。 您可能需要重新考虑您的问题,看看您是否真的需要区分 NaN 和 None。或者,您可以引入一个(布尔)列,指示值是None 还是浮点值(包括NaN);又名面具。 【参考方案1】:

您可以使用applymaplambda 来检查element is None 是否如下,(构造一个不同的示例,如您原来的示例,None 被强制转换为np.nan,因为数据类型是float,您将需要一个object 类型列来按原样保存None,或者按照@Evert 的评论,NoneNaN 在数字类型列中无法区分):

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

【讨论】:

以上是关于在熊猫数据框中检查无的主要内容,如果未能解决你的问题,请参考以下文章

用上一列中的值填充熊猫数据框中的“无”值

检查熊猫数据框中是不是有多个子字符串[重复]

`错误:不平衡括号`同时检查项目是不是存在于熊猫数据框中

如何在熊猫数据框中对字符串进行排序或检查等效性而不考虑顺序?

如何在熊猫数据框中执行按行if和数学运算

熊猫如何在数据框的相应列检查行的每个元素的百分位数