2017-08-05 61 views
0

原始数据帧(DF):选择后仅选择数字字段包括含有浮标从熊猫数据帧

 A B 
0 1 green 
1 2 red 
2 s blue 
3 4.3 yellow 
4 b black 

预期数据帧(DF):

 A B 
0 1 green 
1 2 red 
3 4.3 yellow 

尝试:

既不df[df['A'].astype(str).str.isdigit()]也不df[df['A'].astype(str).str.isdemical()]可以得到预期的结果,但如下:

A  B 
0 1 green 
1 2 red 

希望:

  • 如何得到我想要
  • 解释为什么isdigit()isdemical()失败

回答

2

尝试pd.to_numeric(..., errors='coerce')什么:

In [315]: df[pd.to_numeric(df.A, errors='coerce').notnull()] 
Out[315]: 
    A  B 
0 1 green 
1 2  red 
3 4.3 yellow 

所有非整数值转换到NaN。之后,使用df.notnull,得到一个布尔值掩码并且只是索引。


isdigit()isdecimal()都失败了,因为它们看起来只有整数。浮动不被认为是有效的。

+1

我打算用数字和你刚要快! +1 –

1

另一种简单的方法是isalpha != True

df[df['A'].str.isalpha()!=True] 

df[~df['A'].str.isalpha()] 

regex使用即str.match

df[df['A'].str.match(r'[+-]?([\d]*[.])?[\d]+')] 

以相反的方式去
df[~df['A'].str.match(r'[A-z]')] 

输出:

 
    A  B 
0 1 green 
1 2  red 
3 4.3 yellow