“ TypeError:一元〜的错误操作数类型〜:'float'”不是小于NA(不可用)吗?

时间:2019-01-30 14:35:18

标签: pandas

我正在尝试过滤熊猫数据框。在@jezrael的回答here之后,我可以使用以下内容计算要删除的行:

mask= ((analytic_events['section']==2) & 
       ~(analytic_events['identifier'].str[0].str.isdigit()))
print (mask.sum())

但是,当我对数据运行此操作时,出现以下错误:

  

TypeError跟踪(最近一次通话)    在
        1个mask =((analytic_events ['section'] == 2)&
  ----> 2〜(analytic_events ['identifier']。str [0] .str.isdigit()))
        3
        4次打印(mask.sum())

     

c:\ program files \ python37 \ lib \ site-packages \ pandas \ core \ generic.py in invert (self)
     1454 def 反转(自己):1455试试:   -> 1456 arr = operator.inv(com.values_from_object(self))
     1457返回自身。 array_wrap (arr)
     1458除例外:

     

TypeError:一元〜的错误操作数类型:'float'

该错误bad operand type for unary ~: 'float'的公认观点是,一元运算符遇到了NA值(例如,请参见this answer

问题是我没有任何此类丢失的数据。这是我的分析。正在运行

analytic_events[analytic_events['section']==2]['identifier'].str[0].value_counts(dropna=False)

给出结果:

  

2 1207791
  3 39289
  1 533
  。 56

或正在运行

analytic_events[analytic_events['section']==2]['identifier'].str[0].str.isdigit().value_counts(dropna=False)

给出结果

  

真1247613
  错误56

(请注意,以上金额总计为总行数,即不丢失任何行。)

使用@jezrael的答案below中建议的更直接的方法

analytic_events[analytic_events['section']==2]['identifier'].isnull().sum()
analytic_events[analytic_events['section']==2]['identifier'].str[0].isnull().sum()

都产生输出零。因此,没有NA(不可用)值。

我为什么会收到错误消息

  

TypeError:一元〜的错误操作数类型:'float'

来自本文开头的代码?

1 个答案:

答案 0 :(得分:1)

我相信您需要先按条件过滤,然后再按过滤后的值过滤:

m1 = analytic_events['section']==2

mask = ~analytic_events.loc[m1, 'identifier'].str[0].str.isdigit()

print (mask.sum())