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')
考虑一个 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')