【问题标题】:pandas series || get index of string if present熊猫系列||获取字符串的索引(如果存在)
【发布时间】:2022-01-12 07:41:37
【问题描述】:

请多多包涵。我是 pandas 的新手,并在其中使用系列。

import pandas as pd

s = pd.Series(["koala", "dog", "chameleon"])

'dog' in s.values - 这允许测试它是否存在。

s.isin(['dog']).any() - 这是真的。但是没有任何方法可以获取索引或使用 find。

如何找到“狗”的索引/位置?

其次,如果我有重复的条目(例如狗):

s = pd.Series(["koala", "dog", "chameleon","dog"])

我怎样才能找到第一次或最后一次出现?

我在 python 3X (OS X, M1):
Python 3.9.8 (v3.9.8:bb3fdcfe95, Nov 5 2021, 16:40:46) [Clang 13.0.0 (clang-1300.0.29.3)] on darwin

【问题讨论】:

    标签: python-3.x pandas series


    【解决方案1】:

    我通常做的是:

    #....in clause like
    i = s.index[s.str.contains('dog')]
    

    这对应于“in”子句。如果你想要正确的匹配,你可以去“eq”:

    i2 = s.index[s.eq('dog')]
    

    在这种情况下,它们当然会产生相同的索引。

    【讨论】:

      【解决方案2】:

      您可以使用[].index 获取series 中值的索引。

      s = pd.Series(["koala", "dog", "chameleon"])
      s[s == 'dog'].index
      

      类似地使用min()max() 获取第一次和最后一次出现:

      s = pd.Series(["koala", "dog", "chameleon","dog"])
      d_first, d_last = s[s == 'dog'].index.min(), s[s == 'dog'].index.max()
      

      【讨论】:

      • 谢谢。我使用了上面的代码,但是,我没有将索引作为整数:s[s == 'dog'].indexOut[115]: Int64Index([1], dtype='int64')
      【解决方案3】:

      更改过滤器index 的布尔掩码顺序,并使用iter 获取next 中的最后一个值:

      m = s.eq('dog')[::-1]
      #if list
      m = s.isin(['dog'])[::-1]
      
      print (next(iter(m.index[m]), 'no match'))
      3
      

      如果总是匹配,则使用更简单的方法:

      print (m[m].index[-1])
      3
      

      【讨论】:

        猜你喜欢
        • 2014-10-03
        • 2019-03-27
        • 2017-12-23
        • 2013-07-21
        • 1970-01-01
        • 2022-07-27
        • 1970-01-01
        • 2019-03-10
        • 2021-07-16
        相关资源
        最近更新 更多