【问题标题】:Remove pandas dataframe row if one column's element is non-numeric如果一列的元素不是数字,则删除 pandas 数据框行
【发布时间】:2021-03-24 13:25:31
【问题描述】:

我已经为这个简单的事情寻找答案一个小时了。我有一个看起来像这样的熊猫数据框:

   title      |   price

"some text 1"     124.5
"some text 2"     543.2
"some text 3"     156.2
"some text 4"     "Price N/A"
"some text 5"     216.7

我想删除不包含实际浮动价格的行。我尝试了this answer的建议:

raw_data[raw_data.price.apply(lambda x: x.isnumeric())]

我得到:

AttributeError: 'float' object has no attribute 'isnumeric'

对于如此简单的操作似乎没有任何作用。我尝试了几乎所有在堆栈和其他地方找到的答案。

【问题讨论】:

  • 该错误可能表明您使用的是 Python 2。您使用的是 Python 3 吗?
  • Python 3.8 是我唯一使用的。
  • 使用 isinstance(x, float) 怎么样?
  • raw_data[raw_data.price.apply(lambda x: isinstance(x, float))]

标签: python python-3.x pandas


【解决方案1】:

您可以使用 pandas 的“to_numeric”操作,当遇到字符串值时会抛出错误。此错误将由强制内容为空的“强制”处理。然后我们使用“notnull”操作来过滤这个特定的行。

df[pd.to_numeric(df['price'], errors='coerce').notnull()]

【讨论】:

  • 始终尝试在代码中添加一些注释,并记住在文本前使用四个空格。它将以适当的格式显示。
  • @Arkadiusz 谢谢。我已相应地对其进行了编辑。
【解决方案2】:

您收到一个错误,因为您在 float 上应用了 (lambda x: x.isnumeric())

float.isnumeric() 不存在,但您可以使用isinstance(x, t),如果 x 属于 t 类型,则返回 True

raw_data[raw_data['price'].apply(lambda x : isinstance(x, float))]

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 1970-01-01
    • 2020-07-31
    • 2019-12-11
    • 2021-05-23
    • 1970-01-01
    • 2021-11-11
    • 2014-03-20
    • 2018-05-23
    相关资源
    最近更新 更多