【问题标题】:Filling up a Time Series DataFrame填写时间序列数据框
【发布时间】:2018-08-13 03:13:38
【问题描述】:

我已经使用 Pandas 导入了一个包含时间序列数据的 DataFrame。第一列是不完整的 DatTimevector,因为时间序列数据仅包括进行交易的数据点。接下来的四列是价格,最后三列是“交易量”、“刻度数”和“价值”。我想按以下方式编辑此 DataFrame:我希望填充日期向量,以使时间步长为 1 分钟,并且对于所有插入的行,我希望最后三列为零。我用下面的代码做到了这一点。

def insert_row(idx, df, df_insert):
    dfA = df.iloc[:idx, ]
    dfB = df.iloc[idx:, ]

    df = dfA.append(df_insert).append(dfB).reset_index(drop = True)

    return df

df=pd.read_excel("file_location",skiprows=3,sheet_name='sheet1')
for i in range(1,len(df)):
    while df.iloc[i,0]-df.iloc[i-1,0]>pd.Timedelta('1 minute'):
        df=insert_row(i,df,df.iloc[i-1]+[pd.Timedelta('1minute'),
                0,0,0,0,-df.iloc[i-1,-3],-df.iloc[i-1,-2],-df.iloc[i-,-1]])

有没有人有其他更好更高效的方法?

数据如下:

Time Series Data

期望的输出是: Desired output dataframe

{'Close': {0: 12.65, 1: 12.65, 2: 12.65, 3: 12.65, 4: 12.65},

'Dates': {0: Timestamp('2018-01-08 09:00:00'),
  1: Timestamp('2018-01-08 09:01:00'),
  2: Timestamp('2018-01-08 09:05:00'),
  3: Timestamp('2018-01-08 09:06:00'),
  4: Timestamp('2018-01-08 09:10:00')},

'High': {0: 12.65, 1: 12.65, 2: 12.65, 3: 12.65, 4: 12.65},

'Low': {0: 12.6, 1: 12.65, 2: 12.65, 3: 12.65, 4: 12.65},

'Number_Ticks': {0: 16, 1: 4, 2: 3, 3: 1, 4: 1},

'Open': {0: 12.6, 1: 12.65, 2: 12.65, 3: 12.65, 4: 12.65},

'Value': {0: 83071.8438,
  1: 17279.8984,
  2: 12839.75,
  3: 4263.0498,
  4: 4288.3501},

'Volume': {0: 6568, 1: 1366, 2: 1015, 3: 337, 4: 339}}

【问题讨论】:

  • 欢迎来到 SO!能否请您粘贴df.head().to_dict(),以便我们查看您的数据。还请阅读minimal reproducible example 并更新您的问题,因为这将帮助您获得更多回复。
  • 如果该代码是复制粘贴的,我应该提出错误。 ,sheet_name='sheet1) 缺少结尾 '
  • 您可重现的输入数据在哪里[作为文本,而不是图片]。
  • df.head().to_dict() 给出了我问题的底部,这就是你的意思吗?
  • 请将示例数据和所需信息粘贴为csv 而不是屏幕截图

标签: python pandas dataframe time-series


【解决方案1】:

使用resamplefillna 这应该很容易

df2 = df.set_index('Dates').resample('1 min').first()
price_df = df2[['Open', 'High', 'Low', 'Close', ]].fillna(method='bfill')
volume_df = df2[['Volume', 'Number_Ticks', 'Value',]].fillna(0)
result = pd.concat((price_df, volume_df), axis=1)
  Open    High    Low     Close   Volume  Number_Ticks    Value
Dates                             
2018-01-08 09:00:00   12.60   12.65   12.60   12.65   6568.0  16.0    83071.8438
2018-01-08 09:01:00   12.65   12.65   12.65   12.65   1366.0  4.0     17279.8984
2018-01-08 09:02:00   12.65   12.65   12.65   12.65   0.0     0.0     0.0000
2018-01-08 09:03:00   12.65   12.65   12.65   12.65   0.0     0.0     0.0000
2018-01-08 09:04:00   12.65   12.65   12.65   12.65   0.0     0.0     0.0000
2018-01-08 09:05:00   12.65   12.65   12.65   12.65   1015.0  3.0     12839.7500
2018-01-08 09:06:00   12.65   12.65   12.65   12.65   337.0   1.0     4263.0498
2018-01-08 09:07:00   12.65   12.65   12.65   12.65   0.0     0.0     0.0000
2018-01-08 09:08:00   12.65   12.65   12.65   12.65   0.0     0.0     0.0000
2018-01-08 09:09:00   12.65   12.65   12.65   12.65   0.0     0.0     0.0000
2018-01-08 09:10:00   12.65   12.65   12.65   12.65   339.0   1.0     4288.3501

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 1970-01-01
    • 2015-10-21
    • 2017-05-06
    • 2021-11-11
    • 2021-08-11
    • 2020-10-20
    • 2019-06-30
    • 2018-07-24
    相关资源
    最近更新 更多