python - 如何在 Pandas Dataframe 中增量添加行?

标签 python pandas dataframe append

我正在计算从 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

Check here

最佳答案

IIUC 您可以将每一行的 DataFrames append 到 DataFrames dfs 列表,然后是 concat他们到 df1:

ohlc = pd.DataFrame(columns=('Open','High','Low','Close'))

dfs = []
for row in ohlc.iterrows():
    df = pd.DataFrame([candle_open_price,candle_high_price,
                        candle_low_price,candle_close_price]).T
    dfs.append(df)

df1 = pd.concat(dfs, ignore_index=True)
print (df1)

然后concat到原来的DataFrame ohlc:

df2 = pd.concat([ohlc,df1])
print (df2)

示例(用于在循环的每次迭代中添加相同数据的测试):

#sample data
candle_open_price = pd.Series([1.5,10], 
                              name='Open', 
                              index=pd.DatetimeIndex(['2016-01-02','2016-01-03']) )
candle_high_price =  pd.Series([8,9], 
                               name='High', 
                               index=pd.DatetimeIndex(['2016-01-02','2016-01-03']))
candle_low_price =  pd.Series([0,12], 
                              name='Low', 
                              index=pd.DatetimeIndex(['2016-01-02','2016-01-03']))
candle_close_price =  pd.Series([4,5], 
                                name='Close', 
                                index=pd.DatetimeIndex(['2016-01-02','2016-01-03']))

data = np.array([[1,2,3,5],[7,7,8,9],[10,8,9,3]])
idx = pd.DatetimeIndex(['2016-01-08','2016-01-09','2016-01-10'])
ohlc = pd.DataFrame(data=data, 
                    columns=('Open','High','Low','Close'),
                    index=idx)
print (ohlc)
            Open  High  Low  Close
2016-01-08     1     2    3      5
2016-01-09     7     7    8      9
2016-01-10    10     8    9      3
dfs = []
for row in ohlc.iterrows():
    df = pd.DataFrame([candle_open_price,candle_high_price,
                       candle_low_price,candle_close_price]).T
    #print (df)
    dfs.append(df)

df1 = pd.concat(dfs)
print (df1)
            Open  High   Low  Close
2016-01-02   1.5   8.0   0.0    4.0
2016-01-03  10.0   9.0  12.0    5.0
2016-01-02   1.5   8.0   0.0    4.0
2016-01-03  10.0   9.0  12.0    5.0
2016-01-02   1.5   8.0   0.0    4.0
2016-01-03  10.0   9.0  12.0    5.0

df2 = pd.concat([ohlc,df1])
print (df2)
            Open  High   Low  Close
2016-01-08   1.0   2.0   3.0    5.0
2016-01-09   7.0   7.0   8.0    9.0
2016-01-10  10.0   8.0   9.0    3.0
2016-01-02   1.5   8.0   0.0    4.0
2016-01-03  10.0   9.0  12.0    5.0
2016-01-02   1.5   8.0   0.0    4.0
2016-01-03  10.0   9.0  12.0    5.0
2016-01-02   1.5   8.0   0.0    4.0
2016-01-03  10.0   9.0  12.0    5.0

关于python - 如何在 Pandas Dataframe 中增量添加行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40232520/

相关文章:

python - 如何限制输出的最大字符数?

rpy2 不会转换回 pandas

pandas - 添加一列,该列是 pandas 中连续行的差异结果

python - 按单列中的多个年份进行分组并绘制堆叠结果

从向量中替换行和列的数据框中的值

Python:减少精度 Pandas 时间戳数据帧

python - 在 Python 中用单个值有条件地填充列

python - Pandas - get_dummies 具有来自另一列的值

python - 迭代Python列表的列表并删除每个子列表的最终索引,无需导入

python - 使用 python 的 oauth 谷歌