2015-12-27 147 views
1

我想补充一些数据,实时,一个空数据帧:追加数据实时到一个空大熊猫据帧

import pandas as pd 
import time 

df = pd.DataFrame(columns=['time', 'price']) # this is a simple example 
               # but in my code, I have more 
               # columns: 'volume', etc. 
for i in range(5):        # here it lasts one day in my real use case 
    time.sleep(2) 
    t = pd.datetime.now() 
    df[t] = 5 + i 
    # here I need to have access to the latest updates of df 

print df 

输出是:

Empty DataFrame 
Columns: [time, price, 2015-12-27 01:55:29.812000, 2015-12-27 01:55:31.812000, 2015-12-27 01:55:33.812000, 2015-12-27 01:55:35.812000, 2015-12-27 01:55:37.812000] 
Index: [] 

,而我想:

time        price 
2015-12-27 01:55:29.812000   5 
2015-12-27 01:55:31.812000   6 
2015-12-27 01:55:33.812000   7 
... 

如何向这样的数据框添加数据?

回答

1

您正在将数据框索引到列t中的df[t]。我想你想按行索引它。

从它的外观来看,它似乎是一个系列可能更适合,因为你正在更新一个时间索引。

import pandas as pd 
import time 

series = pd.Series() 

for i in range(5): 
    time.sleep(2) 
    t = pd.datetime.now() 
    series[t] = 5 + i 

print series 


import pandas as pd 
import time 

在于需要一个数据帧,可将其附加的情况下使用df.ix[row_index]

df = pd.DataFrame(columns = ['col1', 'col2']) 

for i in range(5): 
    time.sleep(2) 
    t = pd.datetime.now() # Generate row index 
    df.ix[t] = {'col1': 5 + i, 'col2': 20 + i} 


print df 
+0

谢谢,但我真的需要一个DataFrame(因为我有几列) – Basj

+0

添加了一个例子。使用索引追加单个行。 –

2

考虑使用熊猫append()功能,以您的循环数据列表迁移到数据帧:

df = pd.DataFrame(columns=['time', 'price']) 

for i in range(5): 
    time.sleep(2) 
    t = pd.datetime.now() 
    df = df.append(pd.DataFrame({'time': [t], 
           'price': [5 + i]})) 
print df 
+0

这是不可能的,因为实际上我的'for'循环比'range(5)'(它的持续时间为1天)长得多,我需要能够访问循环内的*更新的DataFrame *。我在原始问题中的代码中添加了一些注释。 – Basj

+0

查看更新。还是相同的概念,但不是在循环中追加到列表,而是在df无循环的情况下批量追加到df,每个迭代在循环中附加到df。 – Parfait

+0

更新是否适合您的需求?如果我的解决方案帮助你,请接受。 – Parfait