我有一个带有许多文本条目的Pandas 系列,我正在try 提取所有的日期并对它们进行排序.这些日期有许多不同的格式,所以挑战是获取所有日期并正确排序.我已经能够使用‘str.findall’成功地列出所有日期,但它没有将日期分成月、日和年,所以我真的不能对它们进行排序.然后,我try 使用‘str.Extall’,但它的工作方式与我预期的不同.

日期类型为mm/dd/yyyy、mm/yyyy等的示例:

import pandas as pd

df = pd.Series(['1/1994 Primary Care Doctor:\n', 'sshe plans to move as of 7/8/71 In-Home Services: None\n', 'Reports MRI of brain done 12/2004 at Gravette Medical Center was WNLPrior EEG:\n'])

wfind = df.str.findall(r'\d{1,2}[/-]\d{1,2}?[/-]?\d{2,4}')
wextract = df.str.extractall(r'(\d{1,2})[/-](\d{1,2})?[/-]?(\d{2,4})')

有了extract个,它就把一年一分为二.对如何处理这一问题有什么建议吗?

我希望的输出是DataFrame,其中一列包含月,另一列包含日,第三列包含年.希望NaN在包含日和月的列中,以防两者都不存在.

推荐答案

看起来您想要提取这样的日期:第一个数字是month,然后是day,然后是以12开头的year,然后包含任何数字,然后可以 Select 后跟两个数字.

您可以使用

df.str.extract(r'\b(?:(0?[1-9]|1[0-2])[/-])?(?:(0?[1-9]|[12]\d|3[01])[/-])?((?:[12]\d)?\d{2})\b', expand=False)

the regex demo.

More details

  • \b-一个词的边界
  • (?:(0?[1-9]|[12]\d|3[01])[/-])? - an optional sequence of
    • (0?[1-9]|[12]\d|3[01])-组1:可选的0,然后是非零数字,或者12和任意数字,或者3,然后是01
    • [/-]-A /-
  • (?:(0?[1-9]|1[0-2])[/-])? - an optional sequence of
    • (0?[1-9]|1[0-2])-组2:可选的0,然后是非零数字,或者1,然后是012
    • [/-]-A /-
  • ((?:[12]\d)?\d{2})-组3:12的可选序列,然后是任意一个数字,然后是两个数字
  • \b-一个词的边界

Pandas代码:

import pandas as pd
df = pd.DataFrame({'text':['1/1994 Primary Care Doctor:\n', 'sshe plans to move as of 7/8/71 In-Home Services: None\n', 'Reports MRI of brain done 12/2004 at Gravette Medical Center was WNLPrior EEG:\n']})
df[['month','day','year']] = df['text'].str.extract(r'\b(?:(0?[1-9]|1[0-2])[/-])?(?:(0?[1-9]|[12]\d|3[01])[/-])?((?:[12]\d)?\d{2})\b', expand=False)
df
                                                text month  day  year
0                      1/1994 Primary Care Doctor:\n     1  NaN  1994
1  sshe plans to move as of 7/8/71 In-Home Servic...     7    8    71
2  Reports MRI of brain done 12/2004 at Gravette ...    12  NaN  2004

Python相关问答推荐

如何从不同长度的HTML表格中抓取准确的字段?

将C struct 的指针传递给Python中的ioctel

Python在通过Inbox调用时给出不同的响应

Python中的锁定类和线程以实现dict移动

在Python中根据id填写年份系列

在编写要Excel的数据透视框架时修复标题行

Python panda拆分列保持连续多行

如何处理嵌套的SON?

带条件计算最小值

管道冻结和管道卸载

PMMLPipeline._ fit()需要2到3个位置参数,但给出了4个位置参数

Telethon加入私有频道

Odoo 16使用NTFS使字段只读

在pandas中使用group_by,但有条件

如何在表中添加重复的列?

使用Python从rotowire中抓取MLB每日阵容

如何杀死一个进程,我的Python可执行文件以sudo启动?

python—telegraph—bot send_voice发送空文件

处理Gekko的非最优解

如何根据rame中的列值分别分组值