问题描述
考虑一个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]
将给出相同的结果,并且对于大序列而言可能更快。