整数到Python中的时间戳

问题描述

考虑一个pd.Series,其中包含一个带有整数的日期列,例如01052012.转换此内容的最佳方法是什么?

示例:

        tDate
0    20040915
1    20041020
2    20041117
3    20041222
4    20050119
..        ...
203  20210818
204  20210915
205  20211020
206  20211117
207  20211222

使用pd.TimeStamp(x)输出

>> pd.Timestamp(x.data.tDate[0])
Timestamp('1970-01-01 00:00:00.020040915')

我可以遍历每个元素并执行以下操作,但这很可能不是一个好习惯:

y = x.values[0][0])[:4]
m = x.values[0][0])[4:6]
d = x.values[0][0])[6:]
pd.Timestamp(int(y),int(m),int(d))

解决方法

这应该也可以

 df['tDate'] = df['tDate'].apply(lambda x: pd.Timestamp(str(x)))

另一种选择是像这样强制转换整个列

 df['tDate'] = df['tDate'].astype(str).astype('datetime64')
,

我首先将整数转换为字符串,然后使用datetime模块的strptime方法。

类似这样的东西:

In [3]: s = pd.Series([20040915,20041020])

In [4]: s = s.map(str).map(lambda x: datetime.datetime.strptime(x,'%Y%m%d'))

In [5]: s
Out[5]:
0   2004-09-15
1   2004-10-20
dtype: datetime64[ns]

如评论中所述,

In [6]: s = pd.Series([20040915,20041020])

In [7]: pd.to_datetime(s.astype(str))
Out[7]:
0   2004-09-15
1   2004-10-20
dtype: datetime64[ns]

将给出相同的结果,并且对于大序列而言可能更快。