如何 get/check df.query() 中一行的位数?

How to get/check number of digits of a row in a df.query()?

我有一个像这样的数据框 df:

number | col1
123    | a
1234   | b
567    | c

我想计算“数字”列中有多少行的数字多于或少于 3 位。 列为 dtype = int64.

当我尝试时:

count = df.query(
    """
    ... 'some other filters' or \
    number.str.len() != 3
    """
)
print(count)

我得到:

AttributeError: Can only use .str accessor with string values!

尝试使用

转换为 str()
count = df.query(
    """
    ... 'some other filters' or \
    str(number).str.len() != 3
    """
)
print(count)

ValueError: "str" is not a supported function

转换为字符串也会计算负号,所以无论如何这都不是真正的解决方案。

删除 len = 3 的检查会删除所有错误消息并打印计数。

如何在不转换为 str 且不应用的情况下计算数据帧查询中的数字(对于我的行数来说太慢了)?

df = pd.DataFrame({'number':[123,1234,567], 'col' : ['a','b','c']})
df['numLen'] = df['number'].apply(lambda x : len(str(x)))

给予

    number  col numLen
0   123     a   3
1   1234    b   4
2   567     c   3

print(df[(df['numLen']) > 3 & (df['number']) > 0].count()) 对于大于数字长度 3

的项目

df[(df['number']) >= 100].count() 这将为您提供超过 3 位的所有数字

In [25]: df = pd.DataFrame({'number':[123, 25, 1234, -165, -99, 567], 'col' : ['a','b','c', 'd', 'e', 'f']})

In [26]: df
Out[26]:
   number col
0     123   a
1      25   b
2    1234   c
3    -165   d
4     -99   e
5     567   f

In [27]: df.query("100 <= abs(number) <= 999")['number'].size
Out[27]: 3