2016-04-19 2 views
0

Мне нужно удалить все виды дат (mm-dd-yy, mm/dd/yyyy, dd.mm.yy, dd-Mon-yyyy и т.д.) из .csv файла с помощью панд dataframe. Может ли метод фильтра использоваться?фильтр датируется dataframe

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)') 

например: Если у меня есть .csv файл с различными колонками с некоторыми данными и датами, как 10/12/2015, 12/01/1995, 2016-19-04, 19th April,2016 и т.д., выходной файл не должен содержать даты.

Sample Data

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) \ д \ г) | ((1 [012] | 0 [1-9]) (3 [01] | 2 \ д | 1 \ д | 0 [1-9]) (19 | 20) \ д \ г) | ((1 [012] | 0 [1 -9]) [- /.] (3 [01] | 2 \ d | 1 \ d | 0 [1-9]) [- /.] (19 | 20) \ d \ d) ') –

+0

, но это throws AttributeError: объект 'module' не имеет атрибута 'filter' –

ответ

0

Конечно, вы можете использовать регулярное выражение, чтобы отфильтровать даты, но я нахожу другой способ: забрать первую строку вашего фрейма данных (при условии, что в вашем 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) 
Смежные вопросы