pandas Python将整数YYYYMMDD传递到日期时间

x4shl7ld  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(236)

我有一个DataFrame,如下所示:

OrdNo  LstInvDt
9      20070620
11     20070830
19     20070719
21     20070719
23     20070719
26     20070911
29     20070918
31      0070816
34     20070925

dtypeint64LstInvDt。正如您所看到的,整数的格式为YYYYMMDD,例如20070530-30 th of May 2007。我尝试了一系列方法,最明显的是:
pd.to_datetime(dt['Date'])pd.to_datetime(str(dt['Date'])),函数不同参数有多种变化。
结果是日期被解释为时间。日期被设置为1970-01-01-根据上面的示例1970-01-01 00:00:00.020070530的结果
我还尝试了类似帖子中的各种.map()函数。
如何正确转换?

6l7fqoea

6l7fqoea1#

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
liwlm1x9

liwlm1x92#

不需要强制转换为字符串,pd.to_datetime()可以解析
整型、浮点型、字符串、日期时间、列表、元组、一维数组、系列、DataFrame/类似于dict
所以直接用特定的format=调用它应该可以。

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

errors=是一个有用的参数,通过将其设置为'coerce',可以获得“中断”日期的NaT值,而不会引发错误。

df['date'] = pd.to_datetime(df['date'], format='%Y%m%d', errors='coerce')

相关问题