Python Panda循环附加数据框

时间:2019-05-03 10:29:27

标签: python pandas dataframe

我正在尝试将许多数据帧附加到一个空数据帧中,但是它不起作用。为此,我正在使用本教程,我的代码是这样的:

我正在循环中生成一个框架,其代码是:

def loop_single_symbol(p1):
    i = 0
    delayedPrice = []
    symbol = [] 
    while i<5 :
        print(p1)
        h = get_symbol_data(p1)
        delayedPrice.append(h['delayedPrice']) 
        symbol.append(h['symbol'])
        i+=1
    df = pd.DataFrame([], columns = []) 
    df["delayedPrice"] = delayedPrice
    df["symbol"] = symbol
    df["time"] = get_nyc_time()
    return df 
    time.sleep(4) 

这段代码正在生成这样的框架:

   delayedPrice symbol time
0          30.5    BAC  6:6
1          30.5    BAC  6:6
2          30.5    BAC  6:6
3          30.5    BAC  6:6
4          30.5    BAC  6:6

我正在运行这样的循环:

length = len(symbol_list())
data = ["BAC","AAPL"]
df = pd.DataFrame([], columns = []) 
for j in range(length): 
    u = data[j]
    if h:
        df_of_single_symbol = loop_single_symbol(u)
        print(df_of_single_symbol)
        df.append(df_of_single_symbol, ignore_index = True)        
print(df)

我试图将两个或多个数据帧附加到一个空数据帧中,但是使用上面的代码,我得到了:

Empty DataFrame
Columns: []
Index: []

我想要这样的结果:

   delayedPrice symbol time
0          30.5    BAC  6:6
1          30.5    BAC  6:6
2          30.5    BAC  6:6
3          30.5    BAC  6:6
4          30.5    BAC  6:6
0        209.15   AAPL  6:6
1        209.15   AAPL  6:6
2        209.15   AAPL  6:6
3        209.15   AAPL  6:6
4        209.15   AAPL  6:6

我如何使用熊猫来做到这一点,什么是最好的方式呢?

注意:此行

h = get_symbol_data(p1)

正在从API获取某些数据

2 个答案:

答案 0 :(得分:1)

正如我在评论中提到的那样,将pandas数据帧追加到一个很好的方法中。相反,我建议您使用更适合的数据存储方式,例如文件或数据库(如果您想实现可伸缩性)。

然后,您可以使用pandas进行构建,即通过仅将数据库或文件的内容读取到数据框中来进行数据分析。

现在,如果您真的想坚持这种方法,我建议joinconcat随您获得更多数据而增加数据框

[编辑]

示例(来自我的一个脚本):

results = pd.DataFrame()
for result_file in result_files:
    df = parse_results(result_file)
    results = pd.concat([results, df], axis=0).reset_index(drop=True)

parse_results是一个函数,它接受文件名并返回以正确方式格式化的数据框,由您自己决定以使其适合您的需求。

答案 1 :(得分:0)

正如评论所述,您最初的错误是您没有将 df.append 调用分配给变量 - 它返回附加的(新)DataFrame。

对于希望就地“扩展”您的 DataFrame(没有中间数据库、列表或字典)的任何其他人,这里有一个提示,显示如何简单地执行此操作:

Pandas adding rows to df in loop

基本上,从空的 DataFrame 开始,已经设置了正确的列,

然后使用 df.loc[ ] 索引将新的数据行分配到数据帧的末尾,其中 len(df) 将指向数据帧的末尾。它看起来像这样:

   df.loc[  len(df)  ] = ["my", "new", "data", "row"]

linked hint 中的更多详细信息。