我有一个熊猫数据框:
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太通用了,没有实现它的一些狡猾技巧!)
答案 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