我有一个数据框,想要删除列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)
但是他们都用漂浮物擦掉了这个专栏。
答案 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_numeric
和notnull
类似的解决方案:
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