首页 > 解决方案 > 如何在循环中创建多个可在循环外使用的 Panda Dataframe

问题描述

我正在尝试抓取一个体育博彩网站并使用 Pandas 显示结果。我想为每个游戏都有一个单独的数据框。每场比赛分为客队和主队。我有每个团队的名单。在此示例中,我希望 515 列表和 516 列表位于一个 df 中,而 519 和 520 列表位于单独的框架中。我不知道如何在循环外打印 df。

A = 
     ['515', '6:00PM', 'Toronto', '-5.5 -110', '-5 -115']
     ['516', '6:00PM', 'Washington', '233 -110', '235.5 -114']
     ['531', '9:00PM', 'Milwaukee', '-4.5 -110', '-4.5 -109']
     ['532', '9:00PM', 'Phoenix', '226.5 -110', '228.5 -112']

for i in range(0, number_of_games):

    df.loc[counter] = ([A[j] for j in range(len(A))])
print(df)

在循环内我的 df 看起来很棒,但在循环外它只返回最后一个值。我知道它会被覆盖,但我不知道如何防止这种情况。

输出内循环

 #    TIME        TEAM       OPEN     CURRENT
0  515  6:00PM     Toronto  -5.5 -110     -5 -115
1  516  6:00PM  Washington   233 -110  235.5 -114
     #    TIME     TEAM        OPEN    CURRENT
0  531  9:00PM  Milwaukee   -4.5 -110   -4.5 -109
1  532  9:00PM    Phoenix  226.5 -110  228.5 -112

输出外环

   #    TIME       TEAM        OPEN     CURRENT
0  531  9:00PM  Milwaukee   -4.5 -110   -4.5 -109
1  532  9:00PM    Phoenix  226.5 -110  228.5 -112

我敢打赌,我已经浏览了这里的 100 个帖子,但仍然无法将我的大脑包裹起来。任何帮助,将不胜感激。

标签: pythonpandas

解决方案


我确定您有需要单个数据帧的理由,但您需要在每次迭代期间创建新的数据帧名称/变量,否则每个数据帧都称为 df.

我重写了您的输入,因为正如评论者所说,您遗漏了一些代码和/或描述。

我将您的列表包装在一个新列表中,然后对其进行迭代。

A = [['515', '6:00PM', 'Toronto', '-5.5 -110', '-5 -115'],
     ['516', '6:00PM', 'Washington', '233 -110', '235.5 -114'],
     ['531', '9:00PM', 'Milwaukee', '-4.5 -110', '-4.5 -109'],
     ['532', '9:00PM', 'Phoenix', '226.5 -110', '228.5 -112']]
    

chunk = 2
total_lists =  len(A)

num_games = int(total_lists / num_lists)
for i in range(num_games):
    df = pd.DataFrame()
    homeaway = A[chunk*chunk*i+chunk]
    for g in homeaway:
        dft = pd.DataFrame(g).T
        df = pd.concat([df, dft])
    globals()['df_{}'.format(i)] = df

print(df_0)
print(df_1)

输出:

print(df_0)
print(df_1)
     0       1           2          3           4
0  515  6:00PM     Toronto  -5.5 -110     -5 -115
0  516  6:00PM  Washington   233 -110  235.5 -114
     0       1          2           3           4
0  531  9:00PM  Milwaukee   -4.5 -110   -4.5 -109
0  532  9:00PM    Phoenix  226.5 -110  228.5 -112

但是您也许可以在代码中使用全局变量。也许是这样的:

for i in range(0, number_of_games):
    df.loc[counter] = ([A[j] for j in range(len(A))])
    globals()['df_{}'.format(i)] = df.loc[counter]

推荐阅读