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

2024-04-25 01:08:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我想删除带有“hhh”的行,因为“a”中的所有数据都是数字。 原始数据量很大。非常感谢你。你知道吗


Tags: 数据dataframe原始数据np数字nanpdhhh
3条回答

选项1
使用pd.to_numeric转换a

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()]
    
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, :]
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)

请注意,在创建数据帧时,遗漏了右括号。你知道吗

我试了三种方法,但只有第三种有效。如果你觉得合适的话,你可以试试其他的。一定要让我知道它是否适用于更大的数据集。你知道吗

相关问题 更多 >