将日期和小时转换为日期时间

2024-09-27 19:28:09 发布

您现在位置:Python中文网/ 问答频道 /正文

使用Pyhon 3.8,pandas 1.1.2

MRE:

df = pd.DataFrame({"date":["2020-07-20", "2020-07-20", "2020-07-20", "2020-07-20"],
                   "hour":["1", "2", "3", "4"]})

df["datetime"]  = df["date"] + " " + df["hour"]

这将创建如下所示的数据帧:

    date       hour     datetime
0   2020-07-20  1   2020-07-20 1
1   2020-07-20  2   2020-07-20 2
2   2020-07-20  3   2020-07-20 3
3   2020-07-20  4   2020-07-20 4

我想使datetime列成为实际的datetime对象

期望的产出将是

    date       hour     datetime
0   2020-07-20  1   2020-07-20 01:00:00
1   2020-07-20  2   2020-07-20 02:00:00
2   2020-07-20  3   2020-07-20 03:00:00
3   2020-07-20  4   2020-07-20 04:00:00

我想用这些数据绘制一个时间序列图。datetime格式不需要使用特定格式,只要它知道使用plotly打印时的递增顺序即可

提前谢谢


Tags: 数据对象dataframepandasdfdatetimedate格式
3条回答

zfill之后使用pandas.to_datetime

df["datetime"]  = df["date"] + " " + df["hour"].str.zfill(2)
pd.to_datetime(df["datetime"])

输出:

0   2020-07-20 01:00:00
1   2020-07-20 02:00:00
2   2020-07-20 03:00:00
3   2020-07-20 04:00:00
Name: datetime, dtype: datetime64[ns]

在python中使用datetime模块的另一种方法

strftime将日期时间转换为str,
strtime将str转换为datetime

base_df["datetime"] = base_df["datetime"].apply(lambda row: datetime.strptime(row, "%Y-%m-%d %H"))

另一种方式

#pad df.hour with 0 on the left

s=df.hour.str.pad(width=2, side='left', fillchar='0')

#concat using df.str.cat

df['datetime']=pd.to_datetime(df['date'].str.cat(s+":00:00", sep=' '))

    date      hour        datetime
0  2020-07-20    1  2020-07-20 01:00:00
1  2020-07-20    2  2020-07-20 02:00:00
2  2020-07-20    3  2020-07-20 03:00:00
3  2020-07-20    4  2020-07-20 04:00:00

相关问题 更多 >

    热门问题