我正在尝试过滤panda数据帧。根据@jezrael在这里的回答,我可以使用以下内容来计算我将删除的行:
mask= ((analytic_events['section']==2) &
~(analytic_events['identifier'].str[0].str.isdigit()))
print (mask.sum())
然而,当我在我的数据上运行这个时,我会得到以下错误:
TypeError Traceback(上次调用)在
1掩码=((analytic_events['ssection']==2)&
---->2~(analytic_events['identifier'].str[0].str.idigit())
3
4打印(mask.sum())c: \program files\python37\lib\site packages\pandas\core\generic.py ininverse(self)
1454 defconverse(self-):1455尝试:->1456 arr=operator.inv(com.values_from_object(self))
1457返回selfarray_wrap(arr)
1458异常除外:TypeError:一元~:"float"的操作数类型不正确
该错误bad operand type for unary ~: 'float'
的公认智慧是一元运算符遇到NA值(例如,请参阅此答案)
问题是我没有任何这样的缺失数据。以下是我的分析。运行
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的回答中建议的更直接的方法
analytic_events[analytic_events['section']==2]['identifier'].isnull().sum()
analytic_events[analytic_events['section']==2]['identifier'].str[0].isnull().sum()
两者都产生输出零。因此没有NA(不可用)值。
为什么我得到错误
TypeError:一元~:"float"的操作数类型错误
来自本文开头的代码?
我认为您需要根据第一个条件进行筛选,然后在筛选值中再次进行筛选:
m1 = analytic_events['section']==2
mask = ~analytic_events.loc[m1, 'identifier'].str[0].str.isdigit()
print (mask.sum())