【问题标题】: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);又名面具。

标签: python pandas numpy 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

【讨论】:

    猜你喜欢
    • 2015-09-05
    • 2022-07-21
    • 2018-08-03
    • 2020-11-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 2022-08-09
    • 1970-01-01
    相关资源
    最近更新 更多