Python 中时间戳的整数

integer to TimeStamp in 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))

我会先将整数转换为字符串,然后使用 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]

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

这也应该有效

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

另一种选择是像这样投射整个专栏

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