2017-01-03 3 views
1

Я в настоящее время есть таблица dataframe показана ниже:Python: Преобразование столбца dataframe из серии для Datetime типа данных

Day_Part Start_Time End_Time 
Quarter 1 2014, 1, 1 2015, 3, 1 
Quarter 2 2014, 3, 3 2014, 7, 3 

Столбцы «Start_Time» и «END_TIME» является панда серией. Я хочу преобразовать тип данных обоих столбцов в datetime.

Мне нужны эти две колонки, чтобы иметь даты-времени, потому что типы данных в более поздний блок кода, я говорю, если этот столбец между этой датой и эту дату я маркировать его квартал 1.

* Любая помощь очень ценится

+0

Гм, я абсолютно уверен, что тип данных не серия. Как вы оцениваете это? Почему бы вам не опубликовать вывод 'df.head()' и 'df.dtypes'. Я подозреваю, что ваши столбцы имеют типы объектов. –

ответ

0

Вы можете использовать to_datetime() со строкой формата для извлечения даты:

date = pd.to_datetime(df.Start_Time, format='%Y, %m, %d').dt.date 

Вы также можете изменить дату на месте:

df[['Start_Time', 'End_Time']] = df[['Start_Time', 'End_Time']].apply(
    lambda x: pd.to_datetime(x, format='%Y, %m, %d').dt.date) 

Или, вы можете преобразовать в дату при чтении CSV:

to_date = lambda x: pd.to_datetime(x, format='%Y, %m, %d').date() 
converters = dict(Start_Time=to_date, End_Time=to_date) 
df = pd.read_csv(StringIO(data), converters=converters) 

проверяемой пример:

import pandas as pd 
from io import StringIO 

data = u""" 
Day_Part,Start_Time,End_Time 
"Quarter 1","2014, 1, 1","2015, 3, 1" 
"Quarter 2","2014, 3, 3","2014, 7, 3" 
""" 
df = pd.read_csv(StringIO(data)) 

# You can use `to_datetime()` with a format string to extract the date: 
date = pd.to_datetime(df.Start_Time, format='%Y, %m, %d').dt.date 

# The start month in the second row is 3 
assert date[1].month == 3 

# You can also modify in place 
df[['Start_Time', 'End_Time']] = df[['Start_Time', 'End_Time']].apply(
    lambda x: pd.to_datetime(x, format='%Y, %m, %d').dt.date) 

# The end month in the second row is 7 
assert df.End_Time[1].month == 7 

# You can convert to date when reading the csv 
to_date = lambda x: pd.to_datetime(x, format='%Y, %m, %d').date() 
converters = dict(Start_Time=to_date, End_Time=to_date) 
df = pd.read_csv(StringIO(data), converters=converters) 

# The end month in the first row is 3 
assert df.End_Time[0].month == 3 
Смежные вопросы