Как удалить год и месяц из DatetimeIndex в пандах? - PullRequest
0 голосов
/ 31 октября 2018

У меня есть датафрейм для панд:

import numpy as np
import pandas as pd
idx = pd.DataFrame(["2017-01-01 00:00:41","2017-01-01 00:06:53",\
                   "2017-01-01 00:07:10"],columns=["DateTime"])
df = pd.DataFrame([221,676,356],columns=["Value"])
df.index = pd.DatetimeIndex(idx["DateTime"])
df

, который производит что-то вроде

      DateTime         Value
2017-01-01 00:13:41     221
2017-01-02 00:06:53     676
2017-01-05 00:22:10     356

Далее я хотел бы удалить информацию о году и месяце из этого индекса DateTime, чтобы получить

  DateTime     Value
01 00:13:41     221
02 00:06:53     676
05 00:22:10     356

Я знаю, что в DataFrame idx я могу удалить его следующим образом:

idx["DateTime"] = idx["DateTime"].str(8:)

Проблема в том, что это больше не распознается пандами как DatetimeIndex. Более того, составление графика становится очень сложным делом (что я хотел бы сделать впоследствии). Есть идеи, как мне этого добиться? (Я уверен, что это может быть сделано, Python / pandas слишком универсальны, чтобы иметь какой-то хитрый прием для его достижения!)

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

Это работает для меня (обновлено)

DF

                    Datetime  Values
0 2018-10-31 21:24:08.380554     258
1 2018-10-31 21:24:09.002616     586

df['Datetime'] = df['Datetime'].apply(lambda x: datetime.strftime(x, "%d %H:%M:%S"))

      Datetime  Values
0  31 21:24:08     258
1  31 21:24:09     586
0 голосов
/ 31 октября 2018

попробуйте это,

print (df['DateTime'].dt.day).astype(str) +' '+ (df['DateTime'].dt.time).astype(str)

Выход:

0    1 00:13:41
1    2 00:06:53
2    5 00:22:10
Name: DateTime, dtype: object
0 голосов
/ 31 октября 2018

Если вы просто хотите время, это то, что вы ищете

df.index = df.index.time

>>>df
          Value
00:00:41    221
00:06:53    676
00:07:10    356

>>>type(df.index[0])
datetime.time

Насколько я могу судить, двумя возможными объектами являются time объекты и datetime объекты, что означает, что в любом случае вам понадобится что-то на год ...

Вы можете попытаться стандартизировать год для всех них так:

df.index = [pd.datetime.strptime(s, '%d %HH-%MM-%SS') 
               for s in [pd.datetime.strftime(values, "%d %HH-%MM-%SS") 
               for values in df.index]]

(Просто первая попытка ... возможно, более простой способ сделать это ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...