2016-04-19 84 views
0

我需要使用pandas數據框從.csv文件中刪除各種日期(mm-dd-yy,mm/dd/yyyy,dd.mm.yy, dd-Mon-yyyy等)。過濾方法可以用於任何用途嗎?從數據框中篩選日期

for col in df.columns.values: 
    pd.filter(regex = '(([1-9]|1[012])[-/.]([1-9]|[12][0-9]|3[01])[-/.](19|20)\d\d)|((1[012]|0[1-9])(3‌​[01]|2\d|1\d|0[1-9])(19|20)\d\d)|((1[012]|0[1-9])[-/.](3[01]|2\d|1\d|0[1-9])[-/.]‌​(19|20)\d\d)') 

E.g:如果我有一個.csv文件與一些數據和日期像10/12/201512/01/19952016-19-0419th April,2016等,輸出文件必須包含沒有日期各列。

數據樣本

column1 column2  column3 
    data 4th April,2016 data 
4/20/2016 20-04-16 20.04.2016 
    data  data  20-04-2016 
4-Apr-16 data  20/04/2016 

,你可以看到我有不同的格式在這裏日期。我需要將它們全部刪除。

+0

您的嘗試,請 – rock321987

+0

的山坳中df.columns.values: pd.filter(正則表達式=「(([1-9] | 1 [012 ])[ - /([1-9] |。[12] [0-9] | 3 [01])[ - /(19 | 20)\ d \ d)|((1 [012] | 0 [1-9])(3 [01] | 2 \ d | 1 \ d | 0 [1-9])(19 | 20)\ d \ d)|((1 [012] | 0 1 -9])[ - /。](3 [01] | 2 \ d | 1 \ d | 0 [1-9])[ - /。](19 | 20)\ d \ d)') –

+0

拋出AttributeError:'模塊'對象沒有屬性'過濾器' –

回答

0

當然,您可以使用正則表達式來過濾日期,但是我發現另一種方法:拾取dataFrame的第一行(假設您的df中沒有NaN),使用該行的每個值初始化一個pandas.Timestamp對象。如果成功,相應的列包含日期

time_columns = [] 
for col in df.columns: 
    try: 
     t = pandas.Timestamp(df.loc[0, col]) 
     time_columns.append(col) 
    except Exception: 
     pass 
df = df.drop(time_columns, axis=1) 

但我不認爲這是一個好的解決方案。這有點奇怪。相反,我覺得你可以分析自己的原始數據第一

+0

但是,在以12/12/2012格式輸入日期時,會顯示以下錯誤。 ValueError:標籤['12/12/2012']不包含在軸 –

+0

@AnilaA你能告訴我你的代碼和你的數據樣本嗎? –

+0

也許你可以編輯你的問題,並在那裏添加樣品... –

0
I have found a solution for 80% of my problem. Some more date formats need to be validated. Thank you for your suggestions and help everyone. :) 
def executeDateRemover(self): 
    data = self.readCSV()  
    newData = data 
    for column in newData: 

newData[column]= newData[column].map(lambda x: re.sub(r'(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]|(?:Jan|Mar|May|Jul|Aug|Oct|Dec)))\1|(?:(?:29|30)(\/|-|\.)(?:0?[1,3-9]|1[0-2]|(?:Jan|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2|(?:Feb))\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9]|(?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep))|(?:1[0-2]|(?:Oct|Nov|Dec)))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})', ' ', x)) 
    pass 
self.writeCSV(newData)