Ich berechne den Open-High-Low-Close (OHLC) von Daten für eine Dauer von jeweils 15 Minuten von 9:15 bis 15:30 Uhr und möchte die OHLC-Werte in einem Datenrahmen in jeder neuen Zeile speichern.Wie füge ich Zeilen in Pandas Dataframe inkrementell hinzu?
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]])
Aber ich bin nicht in der Lage einen Fehler zu tun, sagen immer:
ValueError: cannot set a row with mismatched columns
Ich will nur ich schrittweise die EHTS- Daten jeder 15-minütigen Dauer speichern, die ich & put in Reihen berechnet haben des neuen EHTS- Datenrahmen
EDIT
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!"
Dies ist mein Code-Fehler
ValueError: cannot set by positional indexing with enlargement
Was Ausgabe von 'df = pd.DataFrame ([[candle_open_price ist, candle_high_price, candle_low_price, candle_close_price]]) '' print (df) '? 'Dataframe' mit einer Zeile? Was ist "df.columns"? – jezrael
Beachten Sie, dass das Hinzufügen von Zeilen zu einem Datenrahmen ineffizient ist, da für jede neue Größe ein ganz neuer Datenrahmen erstellt wird. – BrenBarn