wu=pd.DataFrame({'a':['hhh',2,3,4,5],'b':[1,2,np.nan,np.nan,5]}
我想用' hhh'删除该行,因为' a'中的所有数据都是是数字。 原始数据量很大。非常感谢你。
答案 0 :(得分:1)
选项1
使用a
pd.to_numeric
df.a = pd.to_numeric(df.a, errors='coerce')
df
a b
0 NaN 1.0
1 2.0 2.0
2 3.0 NaN
3 4.0 NaN
4 5.0 5.0
非数字列被强制转换为NaN
。然后你可以删除这一行 -
df.dropna(subset=['a'])
a b
1 2.0 2.0
2 3.0 NaN
3 4.0 NaN
4 5.0 5.0
选项2
另一种方法是使用str.isdigit
-
df.a.str.isdigit()
0 False
1 NaN
2 NaN
3 NaN
4 NaN
Name: a, dtype: object
按此过滤 -
df[df.a.str.isdigit().isnull()]
a b
1 2 2.0
2 3 NaN
3 4 NaN
4 5 5.0
备注 -
如果数字也是字符串,则删除isnull
位 -
df[df.a.str.isdigit()]
答案 1 :(得分:0)
import pandas as pd
import numpy as np
wu=pd.DataFrame({'a':['hhh',2,3,4,5],'b':[1,2,np.nan,np.nan,5]})
#wu = wu[wu.a.str.contains('\d+',na=False)]
#wu = wu[wu.a.apply(lambda x: x.isnumeric())]
wu = wu[wu.a.apply(lambda x: isinstance(x, (int, np.int64)))]
print(wu)
请注意,在创建DataFrame时错过了右括号。
我尝试了3种方法,但只有第3种方法有效。如果适合您,您可以随时尝试其他(注释掉)。如果它适用于较大的数据集,请告诉我。
答案 2 :(得分:0)
df = pd.DataFrame({'a':['hhh',2,3,4,5],'b':[1,2,np.nan,np.nan,5]})
df.drop(df[df['a'].apply(type) != int].index, inplace=True)
如果您只想查看相应的行:
df.loc[df['a'].apply(type) != int, :]