将日期转换为熊猫中的日期

时间:2021-07-05 11:25:13

标签: sql pandas datetime casting

我正在尝试用 python 语言编写 SQL 代码:

datediff(mi, cast(tab.[Daily] as date), tab.[Daily]) / 3 as [date_diff]

每日格式为yyyy-mm-dd HH:MM:SS

在 sql 中,此代码计算某个日期的午夜和该行的日期之间 3 分钟间隔的差异。

我想在 python 中应用相同的概念。但我不知道是否有办法自动提取某个日期的午夜,尽管它很有价值。

示例:

           Daily          date_diff
    2020-12-01 00:00:00       0
    2020-12-01 00:03:00       1
    2020-12-01 00:06:00       2
    2020-12-01 00:09:00       3
    2020-12-01 00:12:00       4
    2020-12-01 00:33:00      11
    2020-12-01 00:36:00      12
    2020-12-01 00:39:00      13
    2020-12-01 00:42:00      14
    2020-12-01 00:45:00      15

所以我需要类似的东西:

tab['date_diff'] = (tab['Daily'].dt.minute - tab['ts180']. **MIDNIGHT OF THE DATE IN tab['DailY']** )/3

我试过:

```tab['Midnight'] = pd.to_datetime(tab['Daily'], format = "%Y-%m-%d 00:00:00" )```

但它提取小时分和秒及其值。 所以我尝试只提取日期

```tab['Midnight_date'] = pd.to_datetime(tab['Daily'], format = "%Y-%m-%d" )```

尝试将它与我创建的时间列连接起来,时间列是 00:00:00 小时值 但是这种提取也保留了小时分和秒值。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

  • 这实际上是 Timedelta
  • 的一个用例
  • 生成了与您包含的数据集相似的数据集
  • 重要的列是 Timedelta 工作的日期时间
  • 每次减去参考时间形式并转换成所需的单位
import numpy as np
# generate some data at 3 min intervals and drop some randomly (not first row)
df = pd.DataFrame({"Daily":pd.date_range("1-dec-2020", freq="3min", periods=15)}).drop(np.random.randint(1,15,5))

# use first row as reference time.  want 3 min intervals so 60*3
df.assign(date_diff=(df["Daily"]-df.loc[0,"Daily"]).dt.seconds//(60*3))

<头>
每日 date_diff
0 2020-12-01 00:00:00 0
1 2020-12-01 00:03:00 1
2 2020-12-01 00:06:00 2
3 2020-12-01 00:09:00 3
6 2020-12-01 00:18:00 6
7 2020-12-01 00:21:00 7
8 2020-12-01 00:24:00 8
9 2020-12-01 00:27:00 9
13 2020-12-01 00:39:00 13
14 2020-12-01 00:42:00 14