【问题标题】:How to insert missing time values in a column where there are NaN values如何在有 NaN 值的列中插入缺失的时间值
【发布时间】:2022-01-16 17:43:25
【问题描述】:

在这个 pandas 数据框的时间列中,我正在尝试用缺失的时间值填充 NaN 值。

    ticker  date    time    vol vwap    open    high    low close   lbh lah trades
0   AACG    2022-01-06  09:30:00    33042.0 1.8807  1.8900  1.9200  1.8700  1.9017  0.0 0.0 68.0
1   AACG    2022-01-06  09:31:00    5306.0  1.9073  1.9100  1.9200  1.8801  1.9100  0.0 0.0 27.0
2   AACG    2022-01-06  09:32:00    3496.0  1.8964  1.9100  1.9193  1.8800  1.8900  0.0 0.0 17.0
3   AACG    2022-01-06  09:33:00    5897.0  1.9377  1.8900  1.9500  1.8900  1.9500  0.0 0.0 15.0
4   AACG    2022-01-06  09:34:00    1983.0  1.9362  1.9200  1.9499  1.9200  1.9200  0.0 0.0 9.0
5   AACG    2022-01-06  09:35:00    10725.0 1.9439  1.9400  1.9600  1.9201  1.9306  0.0 0.0 87.0
6   AACG    2022-01-06  09:36:00    5942.0  1.9380  1.9307  1.9400  1.9300  1.9400  0.0 0.0 48.0
7   AACG    2022-01-06  09:37:00    5759.0  1.9428  1.9659  1.9659  1.9400  1.9500  0.0 0.0 11.0
8   AACG    2022-01-06  09:38:00    4855.0  1.9424  1.9500  1.9500  1.9401  1.9495  0.0 0.0 10.0
9   AACG    2022-01-06  09:39:00    6275.0  1.9514  1.9500  1.9700  1.9450  1.9700  0.0 0.0 14.0
10  AACG    2022-01-06  09:40:00    13695.0 2.0150  1.9799  2.0500  1.9749  2.0200  0.0 0.0 59.0
11  AACG    2022-01-06  09:41:00    3252.0  2.0209  2.0275  2.0300  2.0200  2.0200  0.0 0.0 14.0
12  AACG    2022-01-06  09:42:00    12082.0 2.0117  2.0300  2.0400  1.9800  1.9900  0.0 0.0 41.0
13  AACG    2022-01-06  09:43:00    5148.0  1.9802  1.9800  1.9999  1.9750  1.9999  0.0 0.0 11.0
14  AACG    2022-01-06  09:44:00    276.0   1.9927  1.9901  1.9943  1.9901  1.9943  0.0 0.0 5.0
15  AACG    2022-01-06  09:45:00    2379.0  1.9576  1.9601  1.9601  1.9201  1.9201  0.0 0.0 10.0
16  AACG    2022-01-06  09:46:00    8762.0  1.9852  1.9550  1.9900  1.9550  1.9900  0.0 0.0 35.0
17  AACG    2022-01-06  09:47:00    1343.0  1.9704  1.9700  1.9738  1.9700  1.9701  0.0 0.0 5.0
18  AACG    2022-01-06  09:48:00    17080.0 1.9696  1.9700  1.9800  1.9600  1.9600  0.0 0.0 9.0
19  AACG    2022-01-06  09:49:00    9004.0  1.9600  1.9600  1.9600  1.9600  1.9600  0.0 0.0 9.0
20  AACG    2022-01-06  09:50:00    922.0   1.9603  1.9600  1.9613  1.9600  1.9613  0.0 0.0 4.0
21  AACG    2022-01-06  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN
22  AACG    2022-01-06  09:52:00    16914.0 1.9921  1.9800  2.0400  1.9750  2.0399  0.0 0.0 67.0
23  AACG    2022-01-06  09:53:00    4665.0  1.9866  1.9900  2.0395  1.9801  1.9900  0.0 0.0 37.0
24  AACG    2022-01-06  NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN

我已尝试将时间列转换为“timedelta64[m]”值,然后遍历数据框以生成缺失值,但我无法将 timedelta 重新转换回常规时间格式。

我尝试简单地将时间值加到 NaN 值之上,但 DataFrames 似乎不允许算术。

我认为循环将是关键......但我将如何插入缺失值? 这是我目前所拥有的:

h = 9
m = 30
for t in dftime:
    if t == datetime.time(h, m):
        dftime.insert(t, datetime.time(h, m))
#         print('its a match ', t)
        h = h + 0
        m = m + 1
        if m == 60:
            h = h + 1
            m = 00
#             print('stop ops! moving on from ', t)
            continue 
    else:
        print('Woh! ', datetime.time(h, m))
        dftime.insert(t, datetime.time(h, m))
        h = h + 0
        m = m + 1
        if m == 60:
            h = h + 1
            m = 00
#             print('stop ops! moving on from ', t)
            continue

如果您运行此循环,您将看到它成功识别了空值。但是如何将正确的时间值插入空白空间?我想插入 datetime.time(h, m)。

我创建了下面的代码,因此您可以查看我正在查看的相同数据:

timelist = [datetime.time(9, 30),
 datetime.time(9, 31),
 datetime.time(9, 32),
 datetime.time(9, 33),
 datetime.time(9, 34),
 datetime.time(9, 35),
 datetime.time(9, 36),
 datetime.time(9, 37),
 datetime.time(9, 38),
 datetime.time(9, 39),
 datetime.time(9, 40),
 datetime.time(9, 41),
 datetime.time(9, 42),
 datetime.time(9, 43),
 datetime.time(9, 44),
 datetime.time(9, 45),
 datetime.time(9, 46),
 datetime.time(9, 47),
 datetime.time(9, 48),
 datetime.time(9, 49),
 datetime.time(9, 50),
 "nan (This is a string because I couldn't create an actual NaN value)",
 datetime.time(9, 52),
 datetime.time(9, 53),
 "nan (This is a string because I couldn't create an actual NaN value)",
 datetime.time(9, 55),
 datetime.time(9, 56),
 datetime.time(9, 57),
 datetime.time(9, 58),
 datetime.time(9, 59),
 datetime.time(10, 0)]
dftime = pd.Series(data = timelist, name = "time")
dftime

【问题讨论】:

    标签: python loops datetime timedelta


    【解决方案1】:

    幸运的是,Pandas 有一个名为 interpolate 的方法,您可以使用它来填充 nan 值,如果您指定 method='time',它应该可以解决您的问题。这应该看起来像

    dd["time"].interpolate(method="time", inplace=True
    

    https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.interpolate.html#pandas.DataFrame.interpolate

    【讨论】:

      猜你喜欢
      • 2020-10-23
      • 2020-08-22
      • 2018-05-14
      • 2016-01-16
      • 2013-08-28
      相关资源
      最近更新 更多