我有一個復雜的regex模式,用于匹配pandas df中csv列的混合日期。我想用""來替換除重合模式匹配之外的所有內容。我已經嘗試了幾乎所有的否定情況(^ ?!和其他)。但是我一直在用""(空字串)來替換regex匹配。 我的代碼:
import pandas as pd
df.read_csv('path')
df=DataFrame(df)
df.columns=['Date']
Date=df.Date
df['Date']=df['Date'].str.replace(r'^((0?[1-9]|[12]d|30|31)[^wd
:](0?[1-9]|1[0-2])[^wd
:](d{4}|d{2}))|((0?[1-9]|1[0-2])[^wd
:](0?[1-9]|[12]d|30|31)[^wd
:](d{4}|d{2}))',')
我的資料的一些例子:
Date
21/04/2004。
[N/F]
6/07/2004 [N/F].
{}
[N/F]
6/10/2004 2004
1606/2004
{}
21/06/2004 2004 ?
[N/F]
1/03/2018
23/03/17
{}
{}
4/04/2006
19/05/2006
"**3/04/2006/-2/06
2006**"
預期輸出
21/04/2004
6/07/2004
6/10/ 2004
16/2004年6月
21/06/2004
1/03/2018
23/03/17
4/04/2006
19/05/2006年
3/04/2006
我將感謝您的幫助。非常感謝。
uj5u.com熱心網友回復:
我稍微簡化了你的詞組,并且是提取而不是替換:
將你的資料加載到一個新的資料庫。
把你的資料加載到一個DataFrame中:
import pandas as pd
import numpy as np
df = pd.read_csv('data.csv')
print(df)
給出:
Date
0 21/04/ 2004
1 [N/F]
2 607/2004
3 {}。
4 [N/F] 。
5 6/10/ 2004
6 1606/2004
7 {}。
8 2106/2004
9 [N/F]
10 1/03/2018
11 23/03/17
12{}。
13{}。
14 4/04/2006 ?
15 19/05/2006
16 **3/04/2006/-206
2006**
現在提取任何可以被決議為日期的東西:
pattern = r'(([1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(20[01][0-9]|[0-9]{2}))' /span>
df['extracted_date'] = df['Date'] 。 astype(str).str.extract(pattern)[0]
df = df.fillna(''/span>)
print(df)
它回傳:
Date extracted_date
0 2104/2004 2104/20041 [N/F]
2 607/2004 607/20043 {}。
4 [N/F] 。
5 6/10/2004 6/10/2004 2004
6 1606/2004 1606/20047 {}。
8 2106/2004 2106/20049 [N/F]
10 1/03/2018 1/03/201811 2303/17 2303/1712{}。
13{}。
14 4/04/2006 4/04/200615 1905/2006 1905/200616 **3/04/2006/-206
2006年** 3/04/2006 2/06
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/323779.html
標籤:
上一篇:從數字字串中只提取一些數字
