用Python总结持续时间

2024-05-01 22:06:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下数据帧: 比特币买卖价格,日期为OLE格式。你知道吗

Date            Sell        Buy
43031.57567     5720.65     5770.65
43031.57564     5720.65     5770.65
43031.57561     5720.65     5770.65
43031.57558     5720.65     5770.65
43031.57555     5720.65     5770.65
43031.57552     5720.65     5770.65
43031.57549     5720.65     5770.65
43031.57546     5720.65     5770.65
43031.57544     5720.65     5770.65
43031.57541     5720.65     5770.65
43031.57537     5718        5768
43031.57534     5718        5768
43031.57531     5718        5768
43031.57528     5718        5768
43031.57524     5718        5768
43031.57522     5718        5768
43031.57519     5718.45     5768.45
43031.57516     5718.45     5768.45
43031.57512     5718.45     5768.45
43031.57509     5717.55     5767.55
43031.57506     5717.55     5767.55
43031.57504     5716.65     5766.65
4.3031.57501    5716.65     5766.65

我想分析一下我“克服”特定价差(如买入卖出或卖出买入)所需的平均时间,例如价差=20。 我使用以下代码:

import pandas as pd
import csv
import datetime as dt

OLE_TIME_ZERO = dt.datetime(1899, 12, 30, 0, 0, 0)
def ole(oledt):
    return OLE_TIME_ZERO + dt.timedelta(days=float(oledt))

spread = 20
counter = 0 
time = 0

df = pd.read_csv("C:/P/testing33.csv")

for index, row in df.iterrows():
    a = index + 1
    df_slice = df[a::]
    for index1, row1 in df_slice.iterrows():
        if row["Buy"] - row1["Sell"] > spread:
            time = time + ole(row["Date"]) - ole(row1["Date"]) 
            counter += 1
            break
    for index2, row2 in df_slice.iterrows():    
        if row["Sell"] - row2["Buy"] > spread:
            time = time + ole(row["Date"]) - ole(row2["Date"])
            counter += 1
            break

avg_time = time/counter

其背后的逻辑是,当卖出和买入的差值大于20时,就停止“for”循环。 我收到以下错误:

time = time + ole(row["Date"])- ole(row1["Date"])
TypeError: unsupported operand type(s) for +: 'int' and 'datetime.datetime'

你能帮我理解我做错了什么吗?你知道吗


Tags: csvimportdffordatetimedatetimecounter