当前位置: 首页 > 面试题库 >

Python Pandas整数YYYYMMDD到日期时间

融烨华
2023-03-14
问题内容

事先为此表示歉意,但是经过两个小时的搜索和尝试,我在这里找不到正确的答案。我有一个数据框,通过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

这是LstInvDtdtype 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 的表示形式,尽管我 强烈建议您 这样做: