原始数据帧(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()
失败的原因答案 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