Roo*_*kie 23 python datetime pandas
为此提前道歉,但经过两个小时的搜索和尝试,我无法在这里得到正确的答案.我有一个数据框,通过pandas io sql.read_frame()填充.事实证明对我来说太过分了dtype
int64
.整数是格式YYYYMMDD
.例如20070530
- 2007年5月30日.我尝试了一系列方法,最明显的是;
pd.to_datetime(dt['Date'])
和 pd.to_datetime(str(dt['Date']))
功能上有多种变化的不同参数.
结果充其量只是将日期解释为时间.日期设置为1970-01-01
- 结果如上例所示1970-01-01 00:00:00.020070530
我也尝试过.map()
在simular帖子中找到的各种函数.
我注意到根据np.date_range()
可以解释格式的字符串值YYYYMMDD
,但这是我最接近看到解决方案.
如果有人有答案,我会非常感激!
编辑:鉴于Ed Chum的答案,问题很可能与编码有关.rep()
在dataFrame的子集上产生:
OrdNo LstInvDt \n0
9 20070620 \n1
11 20070830 \n2
19 20070719 \n3
21 20070719 \n4
23 20070719 \n5
26 20070911 \n7
29 20070918 \n8
31 0070816 \n9
34 20070925 \n10
这是LstInvDt
dtype int64的时候.
EdC*_*ica 44
to_datetime
接受格式字符串:
In [92]:
t = 20070530
pd.to_datetime(str(t), format='%Y%m%d')
Out[92]:
Timestamp('2007-05-30 00:00:00')
Run Code Online (Sandbox Code Playgroud)
例:
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
Run Code Online (Sandbox Code Playgroud)
编辑
实际上,将类型转换为字符串然后将整个系列转换为日期时间更快,而不是在每个值上调用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
Run Code Online (Sandbox Code Playgroud)
计时
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
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
36549 次 |
最近记录: |