在对来自dataframe的列表进行迭代时使用re.findall()时出错

2024-05-15 04:55:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我将一列从一个列表转换为一个列表:

    subsectors = df['subsectors'].tolist()

我想把这类字符串分开: “买饮料”改为“给我买饮料”

因此,我使用了以下方法之一:

    [' '.join(re.findall('[A-Z][^A-Z]*', s)) for s in subsectors]

    li = re.compile(r'(?<=[a-z])(?=[A-Z])')
    strings = [li.sub(' ', subsectors) for string in subsectors]

    output=[]
    for i in subsectors:
        output.append(" ".join(re.findall('[A-Z][^A-Z]*', i)))

上述所有人都返回了以下信息:

TypeError:应为字符串或类似字节的对象

我知道findall()需要的是字符串而不是列表,但我在这里迭代返回字符串的列表,为什么会出现这个错误

多谢各位


Tags: 方法字符串inredf列表foroutput
2条回答

问题是,给您错误消息“TypeError:expected string或bytes like object”只存在于第二种方法中。 这是因为您将“subsectors”而不是“string”传递给“li.sub”

因此,它应该是:

li = re.compile(r'(?<=[a-z])(?=[A-Z])')
strings = [li.sub(' ', string) for string in subsectors]

完整代码:

import re

subsectors = ['AntibodiesImmunotherapy', 'ProteinsImmunotherapy', 'Wound care', 'Cell therapyImmunotherapy']

strings = [' '.join(re.findall('[A-Z][^A-Z]*', s)) for s in subsectors]
print(strings)

li = re.compile(r'(?<=[a-z])(?=[A-Z])')
strings = [li.sub(' ', string) for string in subsectors]
print(strings)

strings=[]
for i in subsectors:
    strings.append(" ".join(re.findall('[A-Z][^A-Z]*', i)))
print(strings)

让我们试试replace

df = pd.DataFrame({'subsectors':['BuyMeADrink' ]})

df['subsectors'].str.replace('([A-Z][a-z]*)',r' \1').str.strip()

输出:

0    Buy Me A Drink
Name: subsectors, dtype: object

但是,您的问题本质上是不明确的,例如,您应该如何分割'ElectionInTheUSA'

相关问题 更多 >

    热门问题