gpt4 book ai didi

Python pandas整数YYYYMMDD到日期时间

转载 作者:IT老高 更新时间:2023-10-28 20:32:02 25 4
gpt4 key购买 nike

为此提前道歉,但经过两个小时的搜索和尝试,我无法在这里得到正确的答案。我有一个数据框,通过 pandas io sql.read_frame() 填充。被证明对我来说太多的列是 dtype int64。整数的格式为 YYYYMMDD。例如 20070530 - 2007 年 5 月 30 日。我尝试了一系列方法,最明显的是;

pd.to_datetime(dt['Date'])pd.to_datetime(str(dt['Date']))

具有不同参数的功能的多种变化。

结果充其量只是将日期解释为时间。日期设置为 1970-01-01 - 结果如上例 1970-01-01 00:00:00.020070530

我还尝试了类似帖子中的各种 .map() 函数。

我注意到根据 np.date_range() 可以解释 YYYYMMDD 格式的字符串值,但这是我看到的最接近的解决方案。

如果有人有答案,我将非常感激!

编辑:鉴于 Ed Chum 的回答,问题很可能与编码有关。 rep() 在数据帧的子集上产生:

OrdNo LstInvDt\n0
9 20070620\n1
11 20070830\n2
19 20070719\n3
21 20070719\n4
23 20070719\n5
26 20070911\n7
29 20070918\n8
31 0070816\n9
34 20070925\n10

这是当 LstInvDt 为 dtype int64 时。

最佳答案

to_datetime接受格式字符串:

In [92]:

t = 20070530
pd.to_datetime(str(t), format='%Y%m%d')
Out[92]:
Timestamp('2007-05-30 00:00:00')

示例:

In [94]:

t = 20070530
df = pd.DataFrame({'date':[t]*10})
df
Out[94]:
date
0 20070530
1 20070530
2 20070530
3 20070530
4 20070530
5 20070530
6 20070530
7 20070530
8 20070530
9 20070530
In [98]:

df['DateTime'] = df['date'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d'))
df
Out[98]:
date DateTime
0 20070530 2007-05-30
1 20070530 2007-05-30
2 20070530 2007-05-30
3 20070530 2007-05-30
4 20070530 2007-05-30
5 20070530 2007-05-30
6 20070530 2007-05-30
7 20070530 2007-05-30
8 20070530 2007-05-30
9 20070530 2007-05-30
In [99]:

df.dtypes
Out[99]:
date int64
DateTime datetime64[ns]
dtype: object

编辑

实际上将类型转换为字符串然后将整个系列转换为日期时间比对每个值都调用 apply 更快:

In [102]:

df['DateTime'] = pd.to_datetime(df['date'].astype(str), format='%Y%m%d')
df
Out[102]:
date DateTime
0 20070530 2007-05-30
1 20070530 2007-05-30
2 20070530 2007-05-30
3 20070530 2007-05-30
4 20070530 2007-05-30
5 20070530 2007-05-30
6 20070530 2007-05-30
7 20070530 2007-05-30
8 20070530 2007-05-30
9 20070530 2007-05-30

时间

In [104]:

%timeit df['date'].apply(lambda x: pd.to_datetime(str(x), format='%Y%m%d'))

100 loops, best of 3: 2.55 ms per loop
In [105]:

%timeit pd.to_datetime(df['date'].astype(str), format='%Y%m%d')
1000 loops, best of 3: 396 µs per loop

关于Python pandas整数YYYYMMDD到日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27506367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com