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

Python 在对来自dataframe的列表进行迭代时使用re.findall()时出错,python,pandas,iteration,Python,Pandas,Iteration,我将一列从一个列表转换为一个列表: subsectors = df['subsectors'].tolist() 我想把这类字符串分开: “买饮料”改为“给我买饮料” 因此,我使用了以下方法之一: [' '.join(re.findall('[A-Z][^A-Z]*', s)) for s in subsectors] 或 上述所有人都返回了以下信息: TypeError:应为字符串或类似字节的对象 我知道findall()需要的是字符串而不是列表,但我在这里迭代返回字符串的

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

    subsectors = df['subsectors'].tolist()
我想把这类字符串分开: “买饮料”改为“给我买饮料”

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

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

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

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

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


谢谢。

让我们试试更换

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

但是,您的问题本质上是不明确的,例如,您应该如何拆分“选择美国”

让我们试试
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

但是,您的问题本质上是不明确的,例如,您应该如何拆分“ElectionationtheUSA”

该问题会给您错误消息“TypeError:预期的字符串或类似字节的对象”仅在第二种方式下才存在。 这是因为您将“subsectors”而不是“string”传递给“li.sub”

因此,它应该是:

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

li=re.compile(r'(?这个问题会给您错误消息“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]

li=re.compile(r'(?我明白了,谢谢。为什么findall()在这种情况下不起作用?
'.join(re.findall('([A-Z][A-Z]*),'BuyMeADrink'))
对我有效,就像熊猫的等价物一样:
df['subsectors'].str.findall('([A-Z][A-Z]*)).agg('.join)
。不幸的是,我在问题中写的东西对我不起作用。也许这与我列表中的字符串有关。我明白了,谢谢。为什么findall()在这种情况下不起作用?
“”。join(re.findall(“([A-Z][A-Z]*”,“BuyMeADrink”)
对我起作用,就像熊猫的等价物:
df['subsectors']。str.findall(“([A-Z][A-Z]*)).agg(''.join)
。不幸的是,我在问题中写的东西对我不起作用。也许这与我列表中的字符串有关。你能显示“打印(子分区)”和“打印(类型(子分区))”的输出吗?@Rivers subsectors=['AntibodiesImmunotherapy'、'ProteinsImmunotherapy'、'伤口护理'、'Cell therapyImmunotherapy']它比这个长。你能显示“打印(子部门)”和“打印(类型(子部门))”的输出吗?@Rivers subsectors=['AntibodiesImmunotherapy'、'ProteinsImmunotherapy'、'伤口护理'、'细胞治疗Immunotherapy']它比这个字符串长=['''.join(re.findall('[A-Z][^A-Z]*',s]),s)用于子部门中的s)打印(字符串)返回相同的错误您是否尝试过上面的(完整)代码?它正在处理您在注释中提供的列表。可能错误出现在名为“subsectors”的列表中然后。是的,它不起作用。是的,列表中有一些内容,但我不明白是什么。使用Quang代码,它起作用,因此列表中可能有一些字符串会造成干扰。strings=[''.join(re.findall('[A-Z][^A-Z]*',s))for s in subsectors]print(strings)返回相同的错误您尝试过(完整)吗上面的代码?它正在使用您在评论中提供的列表。可能是错误出现在名为“subsectors”的列表中。是的,它不起作用。是的,列表中有一些内容,但我不明白是什么。使用Quang代码,它起作用,因此列表中可能有一些字符串会造成干扰。