某个数据框与以下数据框具有类似的中断:
import pandas as pd
df = pd.DataFrame({'name': ['John', 'Elvis', 'Gerrard', 'Pitty'],
'age': [22,23,24,25],
'document': [111,222,333,4444]})
如何制作过滤器以仅返回文档列中的值仅为3位的行?
答案 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]