2016-11-12 57 views
1

我知道如何在数据帧“东风”列“A”检查“男”值如下蟒蛇大熊猫 - 检查字符串类型的列

df['A'].isnull().values.any() 

存在,但我怎么能检查一个'字符串',我的意思是任何字符串,因为我不知道字符串文本是什么,然后也知道它被发现在哪一行?

回答

1

如果您正在使用Python 3,你可以用一个列表理解和numpy.any

import numpy as np 

np.any([isinstance(val, str) for val in df['A']]) 

如果您正在使用Python 2,*相信的时候,你需要用即basestring更换海峡。

0

我会用矢量熊猫方法:

假设我们有以下DF:

In [116]: df = pd.DataFrame({'a':[1,2,'aaa', 3.14, 2.71], 'b':['2016-01-01', 'bbb', '2016-02-02', '2016-03-03', 'ZZZ']}) 

In [117]: df 
Out[117]: 
     a   b 
0  1 2016-01-01 
1  2   bbb 
2 aaa 2016-02-02 
3 3.14 2016-03-03 
4 2.71   ZZZ 

In [118]: df.dtypes 
Out[118]: 
a object 
b object 
dtype: object 

检查在列字符串应该是数字

In [119]: pd.to_numeric(df.a, errors='coerce') 
Out[119]: 
0 1.00 
1 2.00 
2  NaN 
3 3.14 
4 2.71 
Name: a, dtype: float64 

In [120]: pd.to_numeric(df.a, errors='coerce').isnull() 
Out[120]: 
0 False 
1 False 
2  True 
3 False 
4 False 
Name: a, dtype: bool 

In [121]: df.loc[pd.to_numeric(df.a, errors='coerce').isnull()] 
Out[121]: 
    a   b 
2 aaa 2016-02-02 

检查列中应该是datetime-like的字符串

In [122]: pd.to_datetime(df.b, errors='coerce') 
Out[122]: 
0 2016-01-01 
1   NaT 
2 2016-02-02 
3 2016-03-03 
4   NaT 
Name: b, dtype: datetime64[ns] 

In [123]: df.loc[pd.to_datetime(df.b, errors='coerce').isnull()] 
Out[123]: 
     a b 
1  2 bbb 
4 2.71 ZZZ