如何解决re.findall在对pandas数据框的列表进行迭代时使用时出错
我将pandas df中的列转换为列表:
subsectors = df['subsectors'].tolist()
我想分离这种字符串: 将“ BuyMeADrink”改为“给我喝一杯”
所以我使用了以下之一:
[' '.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()需要字符串而不是列表,但是在这里我要遍历返回字符串的列表,那为什么会出现此错误?
谢谢。
解决方法
让我们尝试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'
该问题仅向您提供第二种方式,该错误信息为“ TypeError:预期的字符串或类似字节的对象”。 那是因为您将“ 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。