我想过滤小于3的数字包括".":
import pandas as pd
data = {"numbers":[1,2,".", 3,4, "."]}
data
{'numbers': [1, 2, '.', 3, 4, '.']}
df=pd.DataFrame(data)
df
numbers
0 1
1 2
2 .
3 3
4 4
5 .
我想要的结果应该是这样的:
numbers
0 1
1 2
2 .
5 .
有人能帮我吗?非常感谢。
您可以使用
In [198]: df[pd.to_numeric(df.numbers, errors='coerce').lt(3) | df.numbers.eq('.')]
Out[198]:
numbers
0 1
1 2
2 .
5 .
为其中的数字等于.
创建掩码m
m = df.numbers == '.'
将与.
不匹配的行转换为int
&检查它们是否低于阈值。将两个滤波器组合在一起以获得所需的输出。
df[m | (df.numbers[~m].astype(int) < 3)]
#outputs:
numbers
0 1
1 2
2 .
5 .
解决此问题的一种方法,
print df[(df['numbers']<3)|(df['numbers']=='.')]