Python 将文本列拆分为数据框架中的列表列,无明确的拆分顺序
我有一个数据框,它包含一列文本,给出一个数字代码,后跟一个冒号和一个文本描述。文本可能包括一个或多个代码描述符,每个描述符由逗号和空格分隔Python 将文本列拆分为数据框架中的列表列,无明确的拆分顺序,python,regex,pandas,Python,Regex,Pandas,我有一个数据框,它包含一列文本,给出一个数字代码,后跟一个冒号和一个文本描述。文本可能包括一个或多个代码描述符,每个描述符由逗号和空格分隔 myDF = pd.DataFrame({'origtext':['012: some text','012: some text, 123: other text','012: some text, 234: text, strings and numbers']}) 数据帧看起来像:
myDF = pd.DataFrame({'origtext':['012: some text','012: some text, 123: other text','012: some text, 234: text, strings and numbers']})
数据帧看起来像:
origtext
0 012: some text
1 012: some text, 123: other text
2 012: some text, 234: text, strings and numbers
我需要将“origtext”列中的文本转换为列表,其中列表的每个元素都由数字代码、冒号和文本描述符组成
我的第一种方法是使用.split()
在,“
处拆分文本,例如:
myDF['textlist'] = myDF['origtext'].str.split(', ')
生产
textlist
0 [012: some text]
1 [012: some text, 123: other text]
2 [012: some text, 234: text, strings and numbers]
在我的真实数据框架中,这对大多数行都很有效,但在少数情况下,文本描述包含,'
。这意味着上面示例中的底部列表包含3个元素(而不是2个),最后一个元素不是以'nnn:'
开头。这使得.split()
方法不合适
是否有一种方法可以在正则表达式中使用匹配的组来标识类似于,123:'
的内容,并将其替换为'xxxxx 123:'
,然后根据'xxxxx'
进行拆分?我已经能够用字符串替换匹配的组,但是我还不能解决如何在保持匹配文本完整的同时向匹配的组添加一些文本
还是有其他方法可以达到预期的效果?您可以使用
myDF['textlist']=myDF['origtext'].str.split(r',\s+(?=\d+:))
看
正则表达式详细信息:
-逗号,
-一个或多个空白字符\s+
-正向前瞻,需要一个或多个数字,然后在当前位置的右侧立即出现一个(?=\d+:)
:
啊,是的!我没有想到对分割的字符串使用积极的前瞻性!这是一个非常巧妙的解决方案。