Pandas DataFrame:列中的大多数数据是' float' ,我想删除' str'

时间:2017-12-30 07:08:41

标签: python pandas dataframe

wu=pd.DataFrame({'a':['hhh',2,3,4,5],'b':[1,2,np.nan,np.nan,5]}

我想用' hhh'删除该行,因为' a'中的所有数据都是是数字。 原始数据量很大。非常感谢你。

3 个答案:

答案 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, :]