仅选择数字字段,包括从pandas dataframe中包含浮点数

时间:2017-08-05 07:16:07

标签: python pandas dataframe

原始数据帧(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 个答案:

答案 0 :(得分: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)

另一种简单的方法是以相反的方式进行,即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