事先为此表示歉意,但是经过两个小时的搜索和尝试,我在这里找不到正确的答案。我有一个数据框,通过pandas iosql.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()
在模拟帖子中找到的各种功能。
我注意到根据np.date_range()
可以解释format的字符串值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的时间。
to_datetime
接受格式字符串:
In [92]:
t = 20070530
pd.to_datetime(str(t), format='%Y%m%d')
Out[92]:
Timestamp('2007-05-30 00:00:00')
例:
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
编辑
实际上,将类型转换为字符串然后将整个系列转换为日期时间要快得多,而不是对每个值调用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
时机
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
问题内容: Python和Matlab经常具有如下所示的整数日期表示形式: 733828.0 733829.0 733832.0 733833.0 733834.0 733835.0 733836.0 733839.0 733840.0 733841.0 这些数字对应于今年的某些日期。你们知道哪个功能可以将它们转换回YYYYMMDD格式吗? 太感谢了! 问题答案: 该课程可以为您提供帮助。如果将这
问题内容: 将日期2011年8月14日更改为格式20110814 ..如何在Java中执行此操作? 这里的14aug是一个字符串… String date =“ 14aug”; 问题答案: 参考: 更新:精英绅士的问题很重要。如果以开头,则应首先对其进行解析,以从上述示例中获取对象:
亚马逊无效操作:Redshift表不支持指定的类型或函数(每个信息消息一个);1语句失败。
我有一个要求,请求以YYYYMMDD格式传递日期。根据swagger文档,在字符串类型下定义日期字段。然而,它遵循RFC 3339第5.6节文件(格式为ex.2018-03-20) 以下代码不适用于yaml。 如何为YYMMDD的日期格式定义YAML定义。
问题内容: 我有以下格式的日期(yyyymmdd,18751104,19140722)…将其转换为date()的最简单方法是什么?或者使用mktime()和子字符串是我的最佳选择…? 问题答案: 使用含日期到字符串转换Unix时间戳: 您可以将结果作为第二个参数传递给自己重新格式化日期: 注意 在1970年Unix时代之前的日期将失败。 另一种适用于1970年之前的日期的替代方法:
问题内容: 我接收到来自Twitter的特定日期以特定格式发送的Twitter消息: 我想将这些日期存储在带有djangos DateTimeField字段的postgresql中的“带有时区的时间戳”字段中。但是,当我存储该字符串时,出现此错误: 我可以自动将twitter datetype转换为python datetime时间(在我的应用程序中的其他地方可以保存日期)。 问题答案: 编写这样
问题内容: 我正在寻找一个正则表达式字符串,该字符串将验证格式为yyyyMMdd(无分隔符)的日期,并且可以用于leap年。我到目前为止发现的最接近的结果仅验证自2000年以来的日期。 问题答案: 我建议使用此页面上所示的:
问题内容: 我有以下的int变量。如何将其转换为Date对象,反之亦然。 问题答案: 将值转换为a 并用于将其解析为一个对象: 反之相似,但是不是使用,而是将结果从转换为: 一种替代方法是使用并手动解析您的eger 的表示形式,尽管我 强烈建议您 这样做: