【发布时间】:2021-03-29 12:05:35
【问题描述】:
我有一个数据框,其中包含一列文本,该列给出数字代码,后跟冒号和文本描述。文本可能包含一个或多个代码描述符,每个代码描述符由逗号和空格分隔。
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:' 之类的内容并将其替换为'xxxxx123:',然后根据'xxxxx' 进行拆分?我已经能够用字符串替换匹配的组,但我无法弄清楚如何在保持匹配文本不变的同时向匹配组添加一些文本。
或者有没有其他方法可以达到预期的结果?
【问题讨论】: