Python Pandas从列中删除非数字行

时间:2016-04-13 07:56:03

标签: python pandas filtering

我有一个数据框,想要删除列Score

中的非数字行
import pandas as pd

df=pd.DataFrame({
'Score': [4.0,6,'3 1/3',7,'43a'],
'Foo': ['Nis','and stimpy','d','cab','abba'],
'Faggio':[0,1,0,1,0]
})

我想要的结果应该是:

   Faggio         Foo  Score
0       0         Nis      4
1       1  and stimpy      6
3       1         cab      7

我试过了:

ds=df[df['Score'].apply(lambda x: str(x).isnumeric())]

print(ds)

ds2=df[df['Score'].apply(lambda x: str(x).isdigit())]

print(ds2)

但是他们都用漂浮物擦掉了这个专栏。

1 个答案:

答案 0 :(得分:2)

我认为您需要添加isnull来检查NaN值,因为如果不是数字,您的函数将返回NaN。使用text method str.isnumeric()str.isdigit()boolean indexing一起使用越来越好:

print df['Score'].str.isnumeric()
0      NaN
1      NaN
2    False
3      NaN
4    False
Name: Score, dtype: object

print df['Score'].str.isnumeric().isnull()
0     True
1     True
2    False
3     True
4    False
Name: Score, dtype: bool

print df[df['Score'].str.isnumeric().isnull()]
   Faggio         Foo Score
0       0         Nis     4
1       1  and stimpy     6
3       1         cab     7

print df[df['Score'].str.isdigit().isnull()]
   Faggio         Foo Score
0       0         Nis     4
1       1  and stimpy     6
3       1         cab     7

to_numericnotnull类似的解决方案:

print df[pd.to_numeric(df['Score'], errors='coerce').notnull()]
   Faggio         Foo Score
0       0         Nis     4
1       1  and stimpy     6
3       1         cab     7