python - 如何在一个熊猫列中拆分文本以创建以分隔符为列名的新列
问题描述
我在数据框中有(组成)文本,如下所示:
My Hospital\r\n\r\nPatient Name MS Bilbo Baggins\r\nDate of Birth 12/11/1932\r\nHospital Number:122222D\r\nDate of Procedure 09/11/2018\r\n\r\nEndoscopist:Dr. Jonny BeGood:\r\n2nd Endoscopist:\r\nReferring Physician \r\nGeneral Practicioner Dr Gilbert Prior
我想根据分隔符拆分数据,以便分隔符成为列名。我最终会得到
Raw Text Patient Name Date of Birth Hospital Number Date of Procedure: Endoscopist: Endoscopist: Referring Physician : General Practicioner:
MS Bilbo Baggins 12/11/1932 122222D 09/11/2018 Dr. Jonny BeGood NA NA NA
一个棘手的部分是分隔符并不总是以相同的顺序出现,但如果这不是一件容易解决的事情,那么它很高兴成为答案的第二部分。
作为第一次尝试,我尝试了以下Mydf.body_analysed.str.extract('(Patient Name.*?Date of Birth)')
但没有提取任何内容,我怀疑这是因为回车使事情进一步复杂化。
解决方案
采用series.str.extract()
解释
正则表达式模式:f'[\n]*{c}[:]*[\r]*[\n]*([A-Za-z0-9/. ]+)[:]*[\r]*'
[\n]*{c}
: 它将搜索每个值 "c" 后跟零次或多次出现的\n[:]*[\r]*[\n]*
: 零次或多次出现: , \r , \n顺序。([A-Za-z0-9/. ]+)
:捕获可以包含定义的字母和符号集的所需单词[:]*[\r]*
:在捕获的单词之后出现零次或多次: , \r 。
完整代码:
Mydf = pd.DataFrame({"body_analysed": ["My Hospital\r\n\r\nPatient Name MS Bilbo Baggins\r\nDate of Birth 12/11/1932\r\nHospital Number:122222D\r\nDate of Procedure 09/11/2018\r\n\r\nEndoscopist:Dr. Jonny BeGood:\r\n2nd Endoscopist:\r\nReferring Physician \r\nGeneral Practicioner Dr Gilbert Prior"]})
columns = ["Patient Name","Date of Birth","Hospital Number","Date of Procedure","Hospital Number","Endoscopist","2nd Endoscopist","General Practicioner"]
for c in columns:
Mydf[c] = Mydf["body_analysed"].str.extract(f'[\n]*{c}[:]*[\r]*[\n]*([A-Za-z0-9/. ]+)[:]*[\r]*')
输出:
body_analysed Patient Name Date of Birth Hospital Number Date of Procedure Endoscopist 2nd Endoscopist General Practicioner
0 My Hospital\r\n\r\nPatient Name MS Bilbo Baggi... MS Bilbo Baggins 12/11/1932 122222D 09/11/2018 Dr. Jonny BeGood Referring Physician Dr Gilbert Prior
推荐阅读
- php - 从子级遍历到父级以在 PHP 中创建以逗号分隔的类别
- python - 如何使用 for 循环创建 2d NumPy 数组 [Python]
- regex-group - 在正则表达式中捕获除最后一个块之外的所有块
- sql - 从同一表的逗号分隔列更新行列
- scala - 用户在数据框 groupby 中聚合时无法执行用户定义的函数
- asp.net - IIS 中的应用程序尝试加载 web.config 两次
- c# - 有时我会收到此错误:防伪 cookie 令牌和表单字段令牌不匹配
- jsf - 国际化中的解析异常 - 找不到消息
- python - 按字符串长度对熊猫系列中的列表进行排序
- java - 在Java中获取矩阵的排序值