2017-01-04 5 views
3

Я новичок в python и имею довольно простой (надеюсь, простой вопрос).Преобразование строки datetime в новые столбцы дня, месяца, года в кадре данных pandas

Скажите, что у меня есть кадр данных с 3 столбцами: время (которое находится в формате YYYY-MM-DDTHH: MM: SSZ), device_id и дождь, но мне нужен первый столбец «время», чтобы стать три столбца «день», «месяц» и «год» со значениями из метки времени.

Таким образом, исходный кадр данных выглядит следующим образом:

 time     device_id        rain 
    2016-12-27T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 
    2016-12-28T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 0.2 
    2016-12-29T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 
    2016-12-30T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 
    2016-12-31T00:00:00Z 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 

Но я пытаюсь получить кадр данных, чтобы выглядеть следующим образом:

 day month year device_id        rain 
    27 12  2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 
    28 12  2016 9b839362-b06d-4217-96f5-f261c1ada8d6 0.2 
    29 12  2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 
    30 12  2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 
    31 12  2016 9b839362-b06d-4217-96f5-f261c1ada8d6 NaN 

Я не заботиться о час/секунды/минуты, но эти значения нужны из первоначальной отметки времени, и я даже не знаю, с чего начать. Пожалуйста помоги!

Вот некоторые воспроизводимые код для начала:

>> import pandas as pd 
>> df = pd.DataFrame([['2016-12-27T00:00:00Z', '9b839362-b06d-4217-96f5-f261c1ada8d6', 'NaN']], columns=['time', 'device_id', 'rain']) 
>> print df 
2016-12-27T00:00:00Z 9b849362-b06d-4217-96f5-f261c1ada8d6 NaN 

ответ

1

Просто разделить время с - или T и первых трех элементов должны соответствовать год, месяц и день колонки, сцепить его с другими двумя колоннами получите то, что вам нужно:

pd.concat([df.drop('time', axis = 1), 
      (df.time.str.split("-|T").str[:3].apply(pd.Series) 
      .rename(columns={0:'year', 1:'month', 2:'day'}))], axis = 1) 

enter image description here


Альтернативой близко к @ nlassaux Подход будет:

df['time'] = pd.to_datetime(df['time']) 
df['year'] = df.time.dt.year 
df['month'] = df.time.dt.month 
df['day'] = df.time.dt.day 
df.drop('time', axis=1, inplace=True) 
+0

Это также работает. Мне нравится, как это делается в одной команде. – JAG2024

+0

У меня есть другой родственный вопрос, возможно, вы можете помочь: http://stackoverflow.com/questions/41471256/add-column-from-one-data-frame-to-group-by-data-frame-in-python – JAG2024

1

Чистейшая способ заключается в использовании встроенных функций панды DateTime.

Во-первых, преобразовать столбец DateTime:

df["time"] = pd.to_datetime(df["time"]) 

Затем извлечь информацию:

df["day"] = df['time'].map(lambda x: x.day) 
df["month"] = df['time'].map(lambda x: x.month) 
df["year"] = df['time'].map(lambda x: x.year) 
+0

Благодаря! Это именно то, что я искал. – JAG2024

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