python-3.x - 带有正则表达式的 Pandas 系列上的 rsplit 不起作用

标签 python-3.x pandas

使用正则表达式的 pandas 系列上的 rsplit 不起作用。我想根据分隔符拆分系列而不删除分隔符。

df2= pd.Series(['Series of Class A','Series of Class B part of Class C','Class D','Class'])
seperator='Class'
data = df2.str.split(r'.(?='+seperator+')', n = 2, expand=True)

结果是:

 0                1        2
0  Series of          Class A     None
1  Series of  Class B part of  Class C
2    Class D             None     None
3      Class             None     None

我想用 rsplit 做同样的事情

我试过了

data = df2.str.rsplit(r'.(?='+seperator+')', n = 2, expand=True)

期望使用 rsplit 得到相同的结果

 0                1        2
0  Series of          Class A     None
1  Series of  Class B part of  Class C
2    Class D             None     None
3      Class             None     None

最佳答案

不幸的是,pd.Series.str.rsplit 不能像记录的那样工作(v0.25stable/v1+)。该项目的 GitHub 问题跟踪器有一个 open bug从 2019 年 11 月开始报告 rsplit 不适用于正则表达式模式(v 0.24.2 和 0.25.2)。在内部,该方法正在调用 str.rsplit不支持正则表达式。

幸运的是,记者 jamespreed 添加了一个(本土)替代品 function :

def str_rsplit(arr, pat=None, n=None):

    if pat is None or len(pat) == 1:
        if n is None or n == 0:
            n = -1
        f = lambda x: x.rsplit(pat, n)
    else:
        if n is None or n == -1:
            n = 0
        regex = re.compile(pat)
        def f(x):
            s = regex.split(x)
            a, b = s[:-n], s[-n:]
            if not a:
                return b
            ix = 0
            for a_ in a:
                ix = x.find(a_, ix) + len(a_)
            x_ = [x[:ix]]
            return x_ + b
    return f
    res = _na_map(f, arr)
    return res

关于python-3.x - 带有正则表达式的 Pandas 系列上的 rsplit 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58455173/

相关文章:

python - 如何在DataFrame中查找具有指定值的行

python - Pandas CSV 导入中二进制变量的最佳数据类型,以减少内存使用

python - 在Python中,如何识别和替换每个句子开头的数值?

python - 使用匹配的 ID 将值从一个数据框填充到另一个数据框

python - 如何根据连续天数对 DataFrame 进行索引

Python根据值列表创建所有字典的组合

python - 斐波那契在 Python 中很奇怪

python - 如何用模式(正则表达式)替换部分字符串在数据框中抛出行

python - 如何根据先前的状态在 pandas 数据框中创建列?

python - 具有非数字数据的索引列中具有重复项的透视/分组数据框