日期时间转换为 pandas datetime64[更新]

Date time conversion to pandas datetime64[updated]

我有一系列 40 年的数据,格式为 stn;yyyymmddhh:rainfall。我想将数据转换成 datetime64 格式。当我使用以下代码将其转换为日期时间时,我得到以下格式 pandas._libs.tslibs.timestamps.Timestamp 但是,我需要它采用 pandas 日期时间格式。基本上,我想将例如 numpy.int64 的 1981010100 转换为 datetime64.

import pandas as pd
df = pd.read_csv('data.txt', delimiter = ";")
df['yyyy'] = df['yyyymmddhh'].astype(str).str[:4]
df = pd.to_datetime(data.yyyy, format='%Y-%m-%d')

Stn;yyyymmddhh;rainfall 
xyz;1981010100;0.0
xyz;1981010101;0.0
xyz;1981010102;0.0
xyz;1981010103;0.0
xyz;1981010104;0.0
xyz;1981010105;0.0
xyz;1981010106;0.0
xyz;1981010107;0.0
xyz;1981010108;0.0
xyz;1981010109;0.4
xyz;1981010110;0.6
xyz;1981010111;0.1
xyz;1981010112;0.1
xyz;1981010113;0.0
xyz;1981010114;0.1
xyz;1981010115;0.6
xyz;1981010116;0.0
xyz;1981010117;0.0
xyz;1981010118;0.2
xyz;1981010119;0.0
xyz;1981010120;0.0
xyz;1981010121;0.0
xyz;1981010122;0.0
xyz;1981010123;0.0
xyz;1981010200;0.0

您可以将pd.to_datetime()format=参数一起使用,如下:

df['yyyymmddhh'] = pd.to_datetime(df['yyyymmddhh'], format='%Y%m%d%H')

输出:

print(df)

    Stn          yyyymmddhh  rainfall 
0   xyz 1981-01-01 00:00:00        0.0
1   xyz 1981-01-01 01:00:00        0.0
2   xyz 1981-01-01 02:00:00        0.0
3   xyz 1981-01-01 03:00:00        0.0
4   xyz 1981-01-01 04:00:00        0.0
5   xyz 1981-01-01 05:00:00        0.0
6   xyz 1981-01-01 06:00:00        0.0
7   xyz 1981-01-01 07:00:00        0.0
8   xyz 1981-01-01 08:00:00        0.0
9   xyz 1981-01-01 09:00:00        0.4
10  xyz 1981-01-01 10:00:00        0.6
11  xyz 1981-01-01 11:00:00        0.1
12  xyz 1981-01-01 12:00:00        0.1
13  xyz 1981-01-01 13:00:00        0.0
14  xyz 1981-01-01 14:00:00        0.1
15  xyz 1981-01-01 15:00:00        0.6
16  xyz 1981-01-01 16:00:00        0.0
17  xyz 1981-01-01 17:00:00        0.0
18  xyz 1981-01-01 18:00:00        0.2
19  xyz 1981-01-01 19:00:00        0.0
20  xyz 1981-01-01 20:00:00        0.0
21  xyz 1981-01-01 21:00:00        0.0
22  xyz 1981-01-01 22:00:00        0.0
23  xyz 1981-01-01 23:00:00        0.0
24  xyz 1981-01-02 00:00:00        0.0

我相信这应该符合您的要求。

import pandas as pd
df = pd.read_csv('data.txt', delimiter = ";")

df['date'] = pd.to_datetime(df['yyyymmddhh'], format='%Y%m%d%H')
df['formatted'] = pd.to_datetime(df['date'].dt.strftime('%Y-%m-%d %H:%M:%S'))