python - 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 函数来获取所需的“月”、“日”和“小时”列?
解决方案
有趣的问题。我发布这个答案,不是为了“为你做你的工作”,而是希望鼓励进一步研究和调查为什么一些代码有效。然后,读者可以进一步了解此示例并进行编辑,以进一步满足您当前和未来的需求。
从教育的角度来看,此示例向用户展示了pandas
和datetime
库。进一步的研究:
pandas.Series.dt
日期时间访问器文档在这里- 如何使用
datetime
模块将整数转换为datetime
对象。文档在这里 - 如何使用该
timedelta
模块来添加/减去日期和时间Docs here
示例代码:
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
推荐阅读
- java - 通过 Java 在 AIX 上执行命令时出现问题
- javascript - 猜数字游戏:进行循环/警报+重置
- css - 在 React 中切换翻转卡片
- scrapy - 在虚拟机上运行python程序
- debugging - 找不到可调试的浏览器选项卡
- python-3.x - Python:如何选择仅包含特定数字的倍数?
- ios - 当前 ViewController 调用 viewWillDisappear 但不调用 viewWillAppear
- php - MPDF 创建损坏的 PDF
- ruby-on-rails - Rails 使用参数中传递的关联值创建新的活动记录
- angular - 动态计算元素的宽度?