【问题标题】:Retrieve date from corrupted datetime column从损坏的日期时间列中检索日期
【发布时间】:2021-07-12 00:24:51
【问题描述】:

我有一个时间序列数据框,其中包含超过 11000 个观察值。不幸的是,日期时间列在以 .csv 格式存储时已损坏。日期部分 (Y/M/D) 丢失了,我只剩下数据框前 ​​50 次观察中显示的时间。

我知道损坏的 date_time 列的遗漏时间部分序列中的相同值对应于特定日期。例如,所有 date_time 值为“10:27.9”的观测值对应于特定日期,所有值为“45:05.8”的观测值对应于某个其他日期(此处为前一个日期)。

鉴于此,假设第一组行属于 2021 年 4 月 15 日,第二组属于 2021 年 4 月 14 日,我如何获取原始日期时间列(Y/M/DH:M:S 格式),所以on.,对于过去的每一天。由于我不确定 10:27.9 是什么(我猜它是 S:M:H 格式),只要我有正确的日期,我是否获得 H:M:S 部分的任何值都没有关系。

欣赏输入。

    D       Date_Time
0   349     10:27.9
1   20      10:27.9
2   66      10:27.9
3   29      10:27.9
4   14      10:27.9
5   112     10:27.9
6   104     10:27.9
7   22      10:27.9
8   135     10:27.9
9   33      10:27.9
10  81      10:27.9
11  53      10:27.9
12  2       10:27.9
13  9       10:27.9
14  18      10:27.9
15  24      10:27.9
16  50      10:27.9
17  1       10:27.9
18  28      10:27.9
19  4       10:27.9
20  9       10:27.9
21  11      10:27.9
22  5       10:27.9
23  1       10:27.9
24  0       10:27.9
25  3       10:27.9
26  0       10:27.9
27  0       10:27.9
28  0       10:27.9
29  0       10:27.9
30  0       10:27.9
31  0       10:27.9
32  0       10:27.9
33  0       10:27.9
34  2       10:27.9
35  0       10:27.9
36  278     45:05.8
37  22      45:05.8
38  38      45:05.8
39  25      45:05.8
40  18      45:05.8
41  104     45:05.8
42  67      45:05.8
43  24      45:05.8
44  120     45:05.8
45  29      45:05.8
46  73      45:05.8
47  51      45:05.8
48  3       45:05.8
49  8       45:05.8
50  18      45:05.8

【问题讨论】:

  • 但是时间45:05.8 是什么意思? mm:ss 没有时间?
  • @tdy 我猜是秒:分钟:小时。其实,i没关系。如果我得到这个时间部分有任何随机值,例如:10:10:10,我很好。
  • @Srinivas 其实这很重要...如果您知道损坏的格式是什么,您可以正确转换它。
  • @JeffC,我明白你的意思。因为我剩下的数据争论只是基于日期,我已经提到它没关系。但是,我的猜测是损坏的格式是 S:M:H 格式;但不确定。

标签: python pandas datetime time-series


【解决方案1】:

从 2021 年 4 月 15 日开始创建反向 date_range(),然后创建 map() 当前的 Date_Time 值。

请注意,这不会保留时间,但如果我正确理解了 cmets,这是可以接受的。

keys = df.Date_Time.unique()
values = pd.date_range('2021-04-15', periods=keys.size, freq='-1D')
mapping = dict(zip(keys, values))

df.Date_Time = df.Date_Time.map(mapping)

#       D  Date_Time
# 0   349 2021-04-15
# 1    20 2021-04-15
# 2    66 2021-04-15
# ...
# 48    3 2021-04-14
# 49    8 2021-04-14
# 50   18 2021-04-14

【讨论】:

  • 感谢您的意见。但我相信这相当于手动为 300 多个集合分配值;希望有更有效的方法。
  • 您是说每个日期块都提前 1 天吗?第一个区块 4 月 15 日,第二个区块 4 月 14 日,第三个区块 4 月 13 日,等等?否则我看不出如何自动推断日期。
  • 是的。正确的。每个连续的区块对应于前一天。
  • @Srinivas 好的,试试更新。它会自动映射反向date_range()
猜你喜欢
  • 2011-07-17
  • 2020-06-02
  • 2018-10-22
  • 1970-01-01
  • 2022-01-24
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多