【发布时间】:2017-03-07 01:31:00
【问题描述】:
我正在计算从 9:15 到 15:30 每 15 分钟的数据的开-高-低-收 (OHLC),并希望将 OHLC 值存储在每个新行的数据框中。
ohlc = pd.DataFrame(columns=('Open','High','Low','Close'))
for row in ohlc:
ohlc.loc[10] = pd.DataFrame([[candle_open_price,candle_high_price,candle_low_price,candle_close_price]])
但我不能说得到以下错误:
ValueError: cannot set a row with mismatched columns
只是我想增量存储我计算的每 15 分钟持续时间的 OHLC 数据并放入新的 ohlc 数据帧的行中
编辑
import numpy as np
import pandas as pd
import datetime as dt
import matplotlib as plt
import dateutil.parser
tradedata = pd.read_csv('ICICIBANK_TradeData.csv', index_col=False,
names=['Datetime','Price'],
header=0)
tradedata['Datetime'] = pd.to_datetime(tradedata['Datetime'])
first_trd_time = tradedata['Datetime'][0]
last_time = dateutil.parser.parse('2016-01-01 15:30:00.000000')
candle_time = 15;
candle_number = 0
while(first_trd_time < last_time):
candledata = tradedata[(tradedata['Datetime']>first_trd_time) & (tradedata['Datetime']<first_trd_time+dt.timedelta(minutes=candle_time))]
first_trd_time = first_trd_time+dt.timedelta(minutes=candle_time)
candle_open_price = candledata.iloc[0]['Price']
candle_open_time = candledata.iloc[0]['Datetime']
candle_close_price = candledata.iloc[-1]['Price']
candle_close_time = candledata.iloc[-1]['Datetime']
candle_high_price = candledata.loc[candledata['Price'].idxmax()]['Price']
candle_high_time = candledata.loc[candledata['Price'].idxmax()]['Datetime']
candle_low_price = candledata.loc[candledata['Price'].idxmin()]['Price']
candle_low_time = candledata.loc[candledata['Price'].idxmin()]['Datetime']
ohlc = pd.DataFrame(columns=('Open','High','Low','Close'))
ohlc_data = pd.DataFrame()
if(candle_number == 0):
ohlc = pd.DataFrame(np.array([[0, 0, 0, 0]]), columns=['Open', 'High', 'Low', 'Close']).append(ohlc, ignore_index=True)
candle_number = candle_number + 1
print "Zeroth Candle"
else:
ohlc.ix[candle_number] = (candle_open_price,candle_open_price,candle_open_price,candle_open_price)
print "else part with incermenting candle_number"
candle_number = candle_number + 1
print "first_trd_time"
print first_trd_time
print candle_number
print "Success!"
这是我的代码错误是
ValueError: cannot set by positional indexing with enlargement
【问题讨论】:
-
df = pd.DataFrame([[candle_open_price,candle_high_price,candle_low_price,candle_close_price]])print (df)的输出是什么?Dataframe一排?df.columns是什么? -
请注意,像这样将行添加到 DataFrame 效率低下,因为会为每个新大小创建一个全新的 DataFrame。
标签: python pandas dataframe append