python - 从数据框中的字符串中提取第一个日期

标签 python regex pandas dataframe

我想从数据帧(Pandas)中提取格式为 yyyy-mm-dd 的第一个日期。当没有找到日期时,只返回一个空字符串。 这些是数据框中存储的数据的一些示例。

1976-05-17 [ ]
[ ] 1976-05-172 
1976-05-17       
1976-05-17 Atlanta, Georgia U.S.  
1976-05-17 1975-07-11
( 1976-05-17 ) 1976-05-17 (age 38) [ ]

在所有情况下,我都想要 1976-05-17 或空字符串。

结果将在 DataFrame 上运行正则表达式并将结果添加到新列

最佳答案

要获得第一个,请使用search,它将停止在第一个匹配的子字符串处:

 r = re.compile("\d{4}-\d{2}-\d{2}")

使用您的示例:

lines = """1976-05-17 [ ]
[ ] 1976-05-172
1976-05-17
1976-05-17 Atlanta, Georgia U.S.
1976-05-17 1975-07-11
( 1976-05-17 ) 1976-05-17 (age 38) [ ]"""
r = re.compile("\d{4}-\d{2}-\d{2}")
for line in lines.splitlines():
    m = r.search(line)
    if m:
        print(m.group())

输出:

1976-05-17
1976-05-17
1976-05-17
1976-05-17
1976-05-17
1976-05-17

如果您将其应用于 df,则可以测试是否存在匹配项,如果是则使用匹配项,否则使用空字符串作为值,即

import pandas as pd

df = pd.read_csv("test.txt")
print(df)
def match(x):
    m = r.search(x)
    if m:
        return  m.group()
    return  ""

输出:

print(df)
print df["date"].apply(match)

                                     date
0                          1976-05-17 [ ]
1                         [ ] 1976-05-172
2                              1976-05-17
3        1976-05-17 Atlanta, Georgia U.S.
4                   1976-05-17 1975-07-11
5  ( 1976-05-17 ) 1976-05-17 (age 38) [ ]


0    1976-05-17
1    1976-05-17
2    1976-05-17
3    1976-05-17
4    1976-05-17
5    1976-05-17
Name: date, dtype: object

如果您同意 Nan 不匹配,您还可以将该列设置为等于 str.extract 的返回值:

print df["date"].str.extract(r"(\d{4}-\d{2}-\d{2})")

“foo”添加到列中:

0    1976-05-17
1    1976-05-17
2    1976-05-17
3    1976-05-17
4    1976-05-17
5    1976-05-17
6           NaN
Name: date, dtype: object

关于python - 从数据框中的字符串中提取第一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801019/

相关文章:

python - 从某一行开始追加

python - 如何在Python中使用pandas以特定方式从数据框中选择数据

java - 在正则表达式中使用 OR 进行分组

python - 在python中组合由一个系列分隔的两个文本

python - 在django中下载和保存文档的问题

python - 如何访问查询的字段

python - 如何使用 Python 对原始信号应用 FFT

java - 匹配空格或什么都不匹配的正则表达式

MYSQL - 在选择查询中使用带有正则表达式的变量来获取记录

python - 删除期末值