python - Pandas 将分钟数字索引(0 到 1440)转换为日期时间

标签 python datetime pandas strftime

我有一个 DataFrame,P,格式为:

                0             1             2
0    10088.245329   9905.462496  12328.830197
1    10092.783624   9688.034026  11785.442316
2    10312.043154   9501.677065  11784.126068
3    10314.919339   9694.886693  11419.465596
...
1438  9636.005396   9544.771643  14181.272599
1439  9414.292352   9312.184926  13988.822708

索引代表一天中的分钟。

我想将其重新格式化为数据时间对象,以便我可以将数据重新采样到半小时一次的数据箱中。

我一直在使用 to_datetime 函数来执行此操作:

P.index=pd.to_datetime(P.index,format='%M')

这可以获取分钟,但不能获取正确的小时:

<class 'pandas.tseries.index.DatetimeIndex'>
[1900-01-01 00:00:00, ..., 1900-01-01 00:59:00]

有人知道怎么做吗?

编辑:

我成功做到了:

pd.to_datetime([(str(int(x))+' '+str(y)) for x,y in zip(np.floor(P.index/60),P.index%60)],format='%H %M')
<class 'pandas.tseries.index.DatetimeIndex'>
[1900-01-01 00:00:00, ..., 1900-01-01 23:59:00]
Length: 1440, Freq: None, Timezone: None

我感觉还有更好的方法?

最佳答案

在我放置np.arange(1480)的地方,您可以使用P.index

在 >= 0.15.0/master 中(2014 年 10 月上旬推出)

In [5]: pd.Timestamp('20130101') + pd.to_timedelta(np.arange(1480),unit='m')
Out[5]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00, ..., 2013-01-02 00:39:00]
Length: 1480, Freq: None, Timezone: None

适用于所有版本

In [4]: pd.DatetimeIndex((pd.Timestamp('20130101') + pd.to_timedelta(np.arange(1480),unit='m')).values)

Out[4]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01 00:00:00, ..., 2013-01-02 00:39:00]
Length: 1480, Freq: None, Timezone: None

出于兴趣,这里是一个 timedelta 重新采样的实际操作:

In [4]: pd.set_option('max_rows',10)

In [5]: df = DataFrame({'A' : np.arange(1480)},index=pd.to_timedelta(np.arange(1480),unit='T'))

In [6]: df
Out[6]: 
                    A
0 days 00:00:00     0
0 days 00:01:00     1
0 days 00:02:00     2
0 days 00:03:00     3
0 days 00:04:00     4
...               ...
1 days 00:35:00  1475
1 days 00:36:00  1476
1 days 00:37:00  1477
1 days 00:38:00  1478
1 days 00:39:00  1479

[1480 rows x 1 columns]

In [7]: df.resample('30T',how='sum')
Out[7]: 
                     A
0 days 00:00:00    435
0 days 00:30:00   1335
0 days 01:00:00   2235
0 days 01:30:00   3135
0 days 02:00:00   4035
...                ...
0 days 22:30:00  40935
0 days 23:00:00  41835
0 days 23:30:00  42735
1 days 00:00:00  43635
1 days 00:30:00  14745

[50 rows x 1 columns]

关于python - Pandas 将分钟数字索引(0 到 1440)转换为日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963652/

相关文章:

python - 在 Pandas 中用 groupby 均值替换基于多个条件的值

java - Python 中两幅图像的比较

python - Flask-Admin 默认过滤器

python - 将列表项映射到带参数的函数

python - 在 Python 中分析时间序列 - pandas 格式错误 - statsmodels

python - 如何将 Pandas 中的非零条目转换为带列表的字典?

python - 霍夫变换检测较短的线

sql - 查询中的多列排序

javascript - 如果超过60分钟,如何让计数器从小时开始?

python - Python 中的 Wufoo API 在特定时间后按日期时间排序不起作用