如何从熊猫的DatetimeIndex中删除年份和月份?

时间:2018-10-31 15:12:03

标签: python pandas datetimeindex

我有一个熊猫数据框:

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 :(得分:0)

如果您只想要时间,这就是您想要的

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]]

(只是第一次尝试……也许是实现这一目标的更简单方法...)

答案 1 :(得分:0)

这对我有用(更新)

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

答案 2 :(得分:0)

尝试一下

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