【问题标题】:Filtering rows containing a string pattern from a Pandas dataframe index从 Pandas 数据帧索引中过滤包含字符串模式的行
【发布时间】:2016-12-20 22:42:29
【问题描述】:

我需要从 Pandas 数据帧索引中过滤包含字符串模式的行。

我找到了以下示例:How to filter rows containing a string pattern from a Pandas dataframe 使用 df[df["col"].str.contains()] 过滤数据帧,该示例适用于该示例。

df = pd.DataFrame({'vals': [1, 2, 3, 4], 'ids': [u'aball', u'bball', u'cnut', u'fball']})

在示例中,如果我将“ids”列复制到索引中,我可以使用 df.index.str.contains("ball"),它也可以正常工作。

但是,当我在数据框中使用 df.index.str.contains("Example") 时,它不起作用。

我认为它不起作用,因为在我的数据框中,返回的值不是array([ True, False ... , True], dtype=bool),而是Index([True, False ... , True], dtype='object', length = 667)

如何重新编写我的代码以使其正常工作?

我没有粘贴我的数据框,因为我是从一个大的 excel 表中读取它的。

谢谢!

【问题讨论】:

  • 如果你指定df.index = df.index.str.contains('ball'),它可能会变成Index([True, False ... , True], dtype='object', length = 667)。你不需要这样做。 df[df.index.str.contains('ball')] 工作得很好。

标签: python pandas


【解决方案1】:

您应该确保您的索引是一个字符串。下面的示例会产生错误。

# Test data
df = DataFrame([1,2,3,4], index=['foo', 'foo1', 'foo2', 1], columns=['value'])
df[df.index.str.contains('foo')]

将索引转换为str 可以得到预期的结果。

df.index = df.index.astype('str')
df[df.index.str.contains('foo')]

      value
foo       1
foo1      2
foo2      3

【讨论】:

    猜你喜欢
    • 2019-06-01
    • 2021-09-08
    • 1970-01-01
    • 2022-11-02
    • 2018-04-27
    • 2021-12-21
    • 2019-02-21
    • 1970-01-01
    相关资源
    最近更新 更多