【问题标题】:Iterating over timestamp in python在python中迭代时间戳
【发布时间】:2018-11-14 20:09:29
【问题描述】:

pandas 数据框部分如下:

 timestamp             quantity price Dates     Time     store_price
 2016-07-01 09:15:55    750 1237.50 2016-07-01  09:15:55    nan
 2016-07-01 09:16:01    750 1237.35 2016-07-01  09:16:01    nan     
 2016-07-01 09:16:46    750 1238.15 2016-07-01  09:16:46    nan 
 2016-07-01 09:16:46    750 1238.00 2016-07-01  09:16:46    nan 
 2016-07-01 09:18:12    750 1239.70 2016-07-01  09:18:12    nan 
 2016-07-01 09:19:05    1500 1237.45 2016-07-01 09:19:05    nan 
 2016-07-01 09:19:58    750 1234.70 2016-07-01  09:19:58    nan 
 2016-07-01 09:20:02    750 1234.95 2016-07-01  09:20:02    nan
 2016-07-01 09:20:04    750 1234.00 2016-07-01  09:20:04    nan 
 2016-07-01 09:20:28    750 1237.25 2016-07-01  09:20:28    nan
 2016-07-01 09:21:18    750 1238.30 2016-07-01  09:21:18    nan
 2016-07-01 09:22:29    750 1237.55 2016-07-01  09:22:29    nan
 2016-07-01 09:22:51    750 1237.50 2016-07-01  09:22:51    nan
 2016-07-01 09:23:25    750 1237.05 2016-07-01  09:23:25    nan
 2016-07-01 09:23:28    750 1237.00 2016-07-01  09:23:28    nan
 2016-07-01 09:24:19    750 1237.05 2016-07-01  09:24:19    nan
 2016-07-01 09:24:19    2250 1237.00 2016-07-01 09:24:19    nan
 2016-07-01 09:24:25    750 1237.00 2016-07-01  09:24:25    nan
 2016-07-01 09:25:23    750 1236.05 2016-07-01  09:25:23    nan 
 2016-07-01 09:26:10    750 1237.00 2016-07-01  09:26:10    nan
 2016-07-01 09:26:18    750 1237.90 2016-07-01  09:26:18    nan
 2016-07-01 09:26:25    750 1237.05 2016-07-01  09:26:25    nan     
 2016-07-01 09:27:54    750 1233.50 2016-07-01  09:27:54    nan 
 2016-07-01 09:28:25    750 1233.85 2016-07-01  09:28:25    nan
 2016-07-01 09:29:17    750 1234.85 2016-07-01  09:29:17    nan
 2016-07-01 09:29:36    750 1235.45 2016-07-01  09:29:36    nan
 2016-07-01 09:29:54    750 1235.00 2016-07-01  09:29:54    nan
 2016-07-01 09:30:06    750 1236.65 2016-07-01  09:30:06    nan 
 2016-07-01 09:30:36    750 1236.60 2016-07-01  09:30:36    nan
 2016-07-01 09:31:01    750 1236.60 2016-07-01  09:31:01    nan
 2016-07-01 09:31:09    750 1236.70 2016-07-01  09:31:09    nan
 2016-07-01 09:31:15    750 1237.00 2016-07-01  09:31:15    nan

我想获得如下所示的数据框,即将时间范围 09.20.00 到 09.30.00 内的行的 price 值存储在不同的列 store_price 中:

 timestamp             quantity price Dates     Time     store_price
 2016-07-01 09:15:55    750 1237.50 2016-07-01  09:15:55    nan
 2016-07-01 09:16:01    750 1237.35 2016-07-01  09:16:01    nan     
 2016-07-01 09:16:46    750 1238.15 2016-07-01  09:16:46    nan 
 2016-07-01 09:16:46    750 1238.00 2016-07-01  09:16:46    nan 
 2016-07-01 09:18:12    750 1239.70 2016-07-01  09:18:12    nan 
 2016-07-01 09:19:05    1500 1237.45 2016-07-01 09:19:05    nan 
 2016-07-01 09:19:58    750 1234.70 2016-07-01  09:19:58    nan 
 2016-07-01 09:20:02    750 1234.95 2016-07-01  09:20:02    1234.95
 2016-07-01 09:20:04    750 1234.00 2016-07-01  09:20:04    1234.00     
 2016-07-01 09:20:28    750 1237.25 2016-07-01  09:20:28    1237.25
 2016-07-01 09:21:18    750 1238.30 2016-07-01  09:21:18    1238.30
 2016-07-01 09:22:29    750 1237.55 2016-07-01  09:22:29    1237.55
 2016-07-01 09:22:51    750 1237.50 2016-07-01  09:22:51    1237.50 
 2016-07-01 09:23:25    750 1237.05 2016-07-01  09:23:25    1237.05
 2016-07-01 09:23:28    750 1237.00 2016-07-01  09:23:28    1237.00
 2016-07-01 09:24:19    750 1237.05 2016-07-01  09:24:19    1237.05
 2016-07-01 09:24:19    2250 1237.00 2016-07-01 09:24:19    1237.00
 2016-07-01 09:24:25    750 1237.00 2016-07-01  09:24:25    1237.00
 2016-07-01 09:25:23    750 1236.05 2016-07-01  09:25:23    1236.05 
 2016-07-01 09:26:10    750 1237.00 2016-07-01  09:26:10    1237.00
 2016-07-01 09:26:18    750 1237.90 2016-07-01  09:26:18    1237.90
 2016-07-01 09:26:25    750 1237.05 2016-07-01  09:26:25    1237.05     
 2016-07-01 09:27:54    750 1233.50 2016-07-01  09:27:54    1233.50 
 2016-07-01 09:28:25    750 1233.85 2016-07-01  09:28:25    1233.85
 2016-07-01 09:29:17    750 1234.85 2016-07-01  09:29:17    1234.85
 2016-07-01 09:29:36    750 1235.45 2016-07-01  09:29:36    1235.45
 2016-07-01 09:29:54    750 1235.00 2016-07-01  09:29:54    1235.00
 2016-07-01 09:30:06    750 1236.65 2016-07-01  09:30:06    nan 
 2016-07-01 09:30:36    750 1236.60 2016-07-01  09:30:36    nan
 2016-07-01 09:31:01    750 1236.60 2016-07-01  09:31:01    nan
 2016-07-01 09:31:09    750 1236.70 2016-07-01  09:31:09    nan
 2016-07-01 09:31:15    750 1237.00 2016-07-01  09:31:15    nan

【问题讨论】:

  • 您好,欢迎来到 Stack Overflow!您提供了数据框的示例。那太棒了!您提到将数据存储在不同的列中以及从时间间隔保存数据。您能否尝试提供另一个显示预期系列或数据框的数据框示例?谢谢!
  • 时间戳数量价格日期时间store_price 2016-07-01 09:15:09 750 1231.95 2016-07-01 09:15:09 nan 2016-07-01 09:15:28 750 1242.00 2016 -07-01 09:15:28 南 2016-07-01 09:16:26 750 1237.30 2016-07-01 09:16:26 南 2016-07-01 09:18:48 750 1239.00 2016-07-01 09:18:48 南 2016-07-01 09:20:02 750 1234.95 2016-07-01 09:20:02 1234.95 2016-07-01 09:20:04 750 1234.00 2016-07-01 09:20: 04 1234.00 我正在尝试 (datetime.time(9, 15, 0)
  • 你好。评论区不适合数据格式化。 Edit您的问题并将预期数据放在那里?
  • 我创建了 numpy 数组,然后尝试了一个“for”循环,for (datetime.time(9, 15, 0)

标签: python-3.x pandas dataframe


【解决方案1】:

解决方案

df['timestamp'] = pd.to_datetime(df['timestamp']) # Only if needed
condition = (df['timestamp'].dt.hour == 9) & (df['timestamp'].dt.minute >= 20) & (df['timestamp'].dt.minute <= 30)
df.loc[condition, "store_price"] = df.loc[condition, "price"]

说明

首先,确保timestamp 列的类型为datetime

df['timestamp'].dtypes

如果返回dtype('O'),则需要使用pd.to_datetime将其转换为日期时间,如下:

df['timestamp'] = pd.to_datetime(df['timestamp'])
df['timestamp'].dtypes
>>> dtype('<M8[ns]')

现在您可以使用.dt 访问器访问列的小时和分钟,并编写如下掩码:

condition = (df['timestamp'].dt.hour == 9) & (df['timestamp'].dt.minute >= 20) & (df['timestamp'].dt.minute <= 30)

最后,您可以使用price 覆盖store_price 列,仅用于匹配使用.loc 条件的行:

df.loc[condition, "store_price"] = df.loc[condition, "price"]

得到你想要的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-28
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多