我有一堆数据表,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"列?
有趣的问题。我发布这个答案,不是为了"为你做你的工作",而是希望鼓励进一步研究和调查为什么一点代码有效。然后,读者可以进一步学习这个例子,并对其进行编辑,以进一步满足您当前和未来的需求。
从教育的角度来看,此示例向用户展示pandas
和datetime
库。进一步研究:
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