2016-06-04 5 views
2

У меня есть файл csv, содержащий столбец с несколькими форматами даты. Мне нужно разбить их и получить извлеченный результат в том же формате.Разделение столбца, содержащего несколько форматов даты

Wednesday 12 August 2015 
Wednesday 12 August 2015 
Friday April 1 2016 
Friday April 1 2016 
5/12/2016 
5/12/2016 

Это файл, который я хочу в формате mm/dd/yy. Мой код выглядит следующим образом:

import re 
import csv 
import pandas as pd 
#delimiters = " ", "/" 

#f = open('merged_34.csv') 
f = open('test3.csv') 
df = pd.read_csv('test3.csv') 
for item in df['serverDatePrettyFirstAction']: 
    if '/' in item: 
     newDate.append(item) 
    else: 
     item = item.split(' ', 1)[1] 
     newDate.append(item) 
df['newDate'] = newDate 
df.to_csv('D:/Python/10.36.202.64/newfile.csv', index = False) 

И это то, что я получаю:

serverDatePrettyFirstAction newDate 
Wednesday 12 August 2015 12-Aug-15 
Wednesday 12 August 2015 12-Aug-15 
Friday April 1 2016   April 1 2016 
Friday April 1 2016   April 1 2016 
5/12/2016     5/12/2016 
5/12/2016     5/12/2016 

Кроме того, есть ли способ, чтобы перезаписать значения в этой же самой колонке

ответ

1

быстрее подход будет использовать панды метод используется to_datetime():

In [2]: df 
Out[2]: 
         Date 
0 Wednesday 12 August 2015 
1 Wednesday 12 August 2015 
2  Friday April 1 2016 
3  Friday April 1 2016 
4     5/12/2016 
5     5/12/2016 

In [6]: df['newDate'] = pd.to_datetime(df['Date']) 

Результат:

In [7]: df 
Out[7]: 
         Date newDate 
0 Wednesday 12 August 2015 2015-08-12 
1 Wednesday 12 August 2015 2015-08-12 
2  Friday April 1 2016 2016-04-01 
3  Friday April 1 2016 2016-04-01 
4     5/12/2016 2016-05-12 
5     5/12/2016 2016-05-12 
1

Вы можете использовать третий участник dateutil библиотека, пока ваши данные не слишком большой. (в конце концов, он угадывает формат каждый раз)

import pandas as pd 

from dateutil import parser 

df = pd.read_csv('test3.csv') 
df['newDate'] = df['serverDatePrettyFirstAction'].apply(parser.parse) 
df.to_csv('newfile.csv', index=False, date_format='%Y-%m-%d ') 

перезаписать значения в одном столбце

Использование
df['serverDatePrettyFirstAction']=df['serverDatePrettyFirstAction'].apply(parser.parse)

+0

Спасибо load.Its работает отлично. Немного медленнее с большими наборами данных, но это нормально. Есть ли другой подход, кроме импорта даты. Просто любопытно!! –

Смежные вопросы