gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:13 25 4
gpt4 key购买 nike

我想从数据框 (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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com