我正在尝试过滤熊猫数据框。在@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'
来自本文开头的代码?
答案 0 :(得分:1)
我相信您需要先按条件过滤,然后再按过滤后的值过滤:
m1 = analytic_events['section']==2
mask = ~analytic_events.loc[m1, 'identifier'].str[0].str.isdigit()
print (mask.sum())