熊猫:处理数据框

时间:2019-05-31 21:17:35

标签: python pandas

某个数据框与以下数据框具有类似的中断:

import pandas as pd

df = pd.DataFrame({'name': ['John', 'Elvis', 'Gerrard', 'Pitty'],
              'age': [22,23,24,25],
              'document': [111,222,333,4444]})

如何制作过滤器以仅返回文档列中的值仅为3位的行?

4 个答案:

答案 0 :(得分:5)

log

df.query('2 <= log10(document) < 3')

      name  age  document
0     John   22       111
1    Elvis   23       222
2  Gerrard   24       333

扩展示例

df = pd.DataFrame({
    'name': ['John', 'Elvis', 'Gerrard', 'Pitty'],
    'age': [22, 23, 24, 25],
    'document': [11, 222, 999, 1000]
})

df

      name  age  document
0     John   22        11  # 2 digit number
1    Elvis   23       222  # 3 digit number
2  Gerrard   24       999  # 3 digit number | edge case
3    Pitty   25      1000  # 4 digit number | edge case

让我们只获取3位数字

df.query('2 <= log10(document) < 3')

      name  age  document
1    Elvis   23       222
2  Gerrard   24       999

答案 1 :(得分:3)

尝试// //将返回除数1000,因为3位数字,因此除数应为0

df[df.document//1000==0]
Out[474]: 
      name  age  document
0     John   22       111
1    Elvis   23       222
2  Gerrard   24       333

我们转换为str,然后计算len

df[df.document.astype(str).str.len().eq(3)]
Out[476]: 
      name  age  document
0     John   22       111
1    Elvis   23       222
2  Gerrard   24       333

更新

df[df.document.astype(str).str.split('.').str[0].str.len().eq(3)]

答案 2 :(得分:1)

df[df.document.apply(lambda x: len(str(x)) == 3)]

答案 3 :(得分:0)

这将适用于document列中的正数和负数:

df[df['document'].abs().astype(str).str.len() == 3]