【发布时间】: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]])
有没有人有其他更好更高效的方法?
数据如下:
期望的输出是: 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