我想从数据帧(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
您还可以将列设置为等于返回值,str.extract
如果您对不匹配项使用Nan可以的话:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句