【问题标题】:Drop rows in a dataframe based on type of the entry根据条目的类型在数据框中删除行
【发布时间】:2022-01-05 04:51:03
【问题描述】:

假设我有一个数据框x,其中有一列terms。术语应该是字符串类型,但有些包含数字,因此我想删除数据框中相应terms 值是整数/浮点数的行。我尝试了以下方法,但收到了Key Error

x = x.drop(x[type(x['terms']) is int].index) 

我应该如何更改代码?

【问题讨论】:

  • 您也想删除'12' 吗?我的意思是数字作为字符串。
  • 好点。值得一试。

标签: python python-3.x pandas dataframe


【解决方案1】:

使用pd.to_numeric:

df = pd.DataFrame({'terms': [13, 0.23, 'hello', 'world', '12', '0.45']})
df = df[pd.to_numeric(df['terms'], errors='coerce').isna()]
print(df)

# Output:
   terms
2  hello
3  world

详情:

>>> df
   terms
0     13
1   0.23
2  hello
3  world
4     12
5   0.45

>>> pd.to_numeric(df['terms'], errors='coerce')
0    13.00
1     0.23
2      NaN
3      NaN
4    12.00
5     0.45
Name: terms, dtype: float64

【讨论】:

    【解决方案2】:

    假设你有一个这样的数据框:

    df = pd.DataFrame({'a':[1,'sd','sf',2,5,'13','s','143f','d234f','z24']})
    #            notice 13 is a string here ^^^^
    
           a
    0      1
    1     sd
    2     sf
    3      2
    4      5
    5     13
    6      s
    7   143f
    8  d234f
    9    z24
    

    如果您想删除 看起来像数字但实际上是字符串的项目,请使用以下命令:

    df = df[~df['a'].astype(str).str.isdigit()]
    

    输出:

    >>> df
           a
    1     sd
    2     sf
    6      s
    7   143f
    8  d234f
    9    z24
    

    如果您想删除实际上根本不是字符串的项目,请使用:

    df = df[df['a'].transform(type).eq(str)]
    

    输出:

    >>> df
           a
    1     sd
    2     sf
    5     13  <--- Notice how the string '13' is kept
    6      s
    7   143f
    8  d234f
    9    z24
    

    【讨论】:

    • 这是一个很好的答案,但数字也可以是浮点数,而不仅仅是自然数。
    猜你喜欢
    • 2022-10-14
    • 2018-06-04
    • 1970-01-01
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多