Python:如何将小时范围转换为一年中的月、日、小时



我有一堆数据表,8760行代表一年中的每一个小时,从1月1日上午12点到12月31日晚上11点。我想创建显示一天中的小时、一个月中的一天和一年中的一个月的列,如下所示:

+------+-------+-----+------+
| 8760 | Month | Day | Hour |
+------+-------+-----+------+
| 0    | 1     | 1   | 0    |
| 1    | 1     | 1   | 1    |
| 2    | 1     | 1   | 2    |
| ...  | ...   | ... | ...  |
| 814  | 2     | 3   | 22   |
| 815  | 2     | 3   | 23   |
| 816  | 2     | 4   | 0    |
| ...  | ...   | ... | ...  |
| 8758 | 12    | 31  | 22   |
| 8759 | 12    | 31  | 23   |
+------+-------+-----+------+

我可以使用哪些python函数来获得所需的"Month"、"Day"one_answers"Hour"列?

有趣的问题。我发布这个答案,不是为了"为你做你的工作",而是希望鼓励进一步研究和调查为什么一点代码有效。然后,读者可以进一步学习这个例子,并对其进行编辑,以进一步满足您当前和未来的需求。

从教育的角度来看,此示例向用户展示pandasdatetime库。进一步研究:

  • pandas.Series.dt日期时间访问器此处的文档
  • 如何使用datetime模块将整数转换为datetime对象。此处的文档
  • 如何使用timedelta模块在此处进行日期和时间单据的加减

示例代码:

import pandas as pd
from datetime import datetime as dt
from datetime import timedelta as td
# Create the starting date as a `datetime` object.
start = dt(1900, 1, 1, 0, 0, 0)
# List initialiser.
result = [start]
# Build a list of datetime objects for each hour of the year.
for i in range(1, 8760):
start += td(seconds=3600)
result.append(start)
# Initialise a DataFrame data structure.
df = pd.DataFrame({'dates': result})
# Add each column by extracting the object of interest from the datetime.
df['8760'] = df.index+1
df['month'] = df['dates'].dt.month
df['day'] = df['dates'].dt.day
df['hour'] = df['dates'].dt.hour
# Remove the datetime object column.
df.drop(['dates'], inplace=True, axis=1)

输出:

8760  month  day  hour
0        1      1    1     0
1        2      1    1     1
2        3      1    1     2
3        4      1    1     3
4        5      1    1     4
...    ...    ...  ...   ...
8755  8756     12   31    19
8756  8757     12   31    20
8757  8758     12   31    21
8758  8759     12   31    22
8759  8760     12   31    23