如何在pandas系列对象中查找非整数值,例如浮点数、字符串?
有一个类似于以下的系列对象:
a=(1.2,3,4,5,6,2,8,5,9)
我尝试使用to_numeric
,但这并不能帮助识别float
值。有没有一种方法可以检查integer
值?
如何在pandas系列对象中查找非整数值,例如浮点数、字符串?
有一个类似于以下的系列对象:
a=(1.2,3,4,5,6,2,8,5,9)
我尝试使用to_numeric
,但这并不能帮助识别float
值。有没有一种方法可以检查integer
值?
import pandas as pd
a = (1.2,3,4,5,6,2,8,5,9)
df_floats = pd.to_numeric(a)
df_rounds = df_floats.round()
df_ints = df_rounds[df_rounds == df_floats].astype(int)
df_floats = df_floats[df_rounds != df_floats]
如果要检查非整数值,可以使用列表推导式
,如果值的类型
是字符串
和整数
:
import pandas as pd
a=['a',3,4,5,6,2,8,5,9]
s = pd.Series(a)
print s
0 a
1 3
2 4
3 5
4 6
5 2
6 8
7 5
8 9
dtype: object
print [type(x) for x in s]
[<type 'str'>, <type 'int'>, <type 'int'>, <type 'int'>, <type 'int'>, <type 'int'>, <type 'int'>, <type 'int'>, <type 'int'>]
print [type(x) == int for x in s]
[False, True, True, True, True, True, True, True, True]
或者使用to_numeric
和notnull
:
print pd.to_numeric(s, errors='coerce').notnull()
0 False
1 True
2 True
3 True
4 True
5 True
6 True
7 True
8 True
dtype: bool
如果值是 int
和 float
,Series
将所有值转换为 float
:
import pandas as pd
a=[1.2,3,4,5,6,2,8,5,9]
s = pd.Series(a)
print s
0 1.2
1 3.0
2 4.0
3 5.0
4 6.0
5 2.0
6 8.0
7 5.0
8 9.0
dtype: float64
print [type(x) for x in s]
[<type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>, <type 'numpy.float64'>]
float
。或者我漏掉了什么? - jezrael
a.apply(lambda x : isinstance(x, int))
或类似的方法,但是对于大量数据来说,这样做会很慢。 - EdChum