将时间序列列更改为日期

Posted

技术标签:

【中文标题】将时间序列列更改为日期【英文标题】:Changing timeseries column into a date 【发布时间】:2022-01-17 18:19:03 【问题描述】:

我有一个包含 2 列的时间序列,第一列是 1970 年 1 月 1 日之后的几个小时。在这个列中,一年只有 360 天,12 个月是 30 天。我需要将此列转换为可用日期,以便我可以根据月、年等分析另一列(例如 1997-Jan-1-1 是年-月-日-小时)。

我需要用模数创建一个数组,将小时列的每一行转换为小时日、日月、年等,以便该列改为年、月、日和小时。但我不知道该怎么做。欣赏它可能会令人困惑。对此的任何帮助都会非常有帮助。

Input: 233280.5 (in hours)
Output: 1997-01-01-01 (year-day-month-hour)

【问题讨论】:

请在您的问题中分享示例输入和预期输出。 输入:233280.5(小时) 输出:1997-01-01-01(年-日-月-小时),你的意思是这种吗? 从 1970-01-01 添加 360 天的年份的 233280.5 小时应该是 1997-01-01 00:30:25,不是吗?你想四舍五入吗? 是的,抱歉,下一个数据点例如是 233281.5。所以我想四舍五入取半值作为整个小时,在这种情况下,是 1997-01-01-01 【参考方案1】:

您可以计算年数并将其添加到参考日期,例如

import pandas as pd
import numpy as np
from pandas.tseries.offsets import DateOffset

refdate = pd.Timestamp('1970-01-01')
df = pd.DataFrame('360d_year_hours': [233280.5])

# we calculate the number of years and fractional years as helper Series
y_frac, y = np.modf(df['360d_year_hours'] / (24*360))

# now we can calculate the new date's year:
df['datetime'] = pd.Series(refdate + DateOffset(years=i) for i in y)

# we need the days in the given year to be able to use y_frac
daysinyear = np.where(df['datetime'].dt.is_leap_year, 366, 365)

# ...so we can update the datetime and round to the hour:
df['datetime'] = (df['datetime'] + pd.to_timedelta(y_frac*daysinyear, unit='d')).dt.round('h')

# df['datetime']
# 0   1997-01-01 01:00:00
# Name: datetime, dtype: datetime64[ns]

【讨论】:

谢谢,我明白你在这里做了什么,但我不知道如何将它与我现有的数据框一起使用。如果我将现有数据框转换为日期时间,它会将其转换为这种格式吗?或者我还有什么需要补充的吗? @Delly98 不确定我是否明白您的问题;您可以只使用代码向现有数据框添加一列,不是吗?它不会修改您在计算之前拥有的数据。 啊,对了,我已经找到你了。所以它只会在我的数据框中添加一个单独的列,日期格式为here。谢谢 @Delly98 是的,pandas datetime 数据类型是您想要使用的所有 time series functionality :)

以上是关于将时间序列列更改为日期的主要内容,如果未能解决你的问题,请参考以下文章

将数据框中的所有日期更改为标准日期时间

如何将熊猫时间戳更改为 python 日期时间对象?

将日期索引 dtype 从对象更改为日期时间以进行每月可视化

SSIS将日期时间变量更改为其他格式

无法将数据类型更改为日期

将字符时间更改为 Postgres 中的日期? [关闭]