首页 > 解决方案 > 我只有一个里面有 3 个数据框。我怎样才能连接它们?

问题描述

我真的沉迷于此。我不知道如何将这 3 个数据帧合二为一,因为它们在一个数组内。我真的需要你的帮助。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

str = 'https://fbref.com/en/comps/Big5/{}/{}-Big-5-European-Leagues-Stats'

seasons = ["2017-2018", "2018-2019", "2019-2020"]

for season in seasons:
    url = str.format(season, season)
    league = pd.read_html(url)
    league = league[0]
    league["Season"] = season
    print(type(league))


<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>
<class 'pandas.core.frame.DataFrame'>

标签: pythonpandasdataframe

解决方案


您可以使用pandas.concat

import pandas as pd

url = "https://fbref.com/en/comps/Big5/{}/{}-Big-5-European-Leagues-Stats"

seasons = ["2017-2018", "2018-2019", "2019-2020"]

dfs = []
for season in seasons:
    league = pd.read_html(url.format(season, season))[0]
    dfs.append(league)

df = pd.concat(dfs)
print(df)

df.to_csv("data.csv", index=False)

印刷:

    Rk            Squad  Country  LgRk  MP   W   D   L   GF  GA  GD  Pts  Pts/G    xG   xGA   xGD  xGD/90  Attendance                              Top Team Scorer                         Goalkeeper
0    1  Manchester City  eng ENG     1  38  32   4   2  106  27  79  100   2.63  80.1  23.0  57.1    1.50       54070                           Sergio Agüero - 21                            Ederson
1    2         Juventus   it ITA     1  38  30   5   3   86  24  62   95   2.50  59.8  28.7  31.0    0.82       39316                            Paulo Dybala - 22                   Gianluigi Buffon
2    3    Bayern Munich   de GER     1  34  27   3   4   92  28  64   84   2.47  77.7  33.6  44.1    1.30       75000                      Robert Lewandowski - 29                       Sven Ulreich
3    4        Paris S-G   fr FRA     1  38  29   6   3  108  29  79   93   2.45  89.2  32.2  57.0    1.50       46929                          Edinson Cavani - 28                    Alphonse Areola
4    5        Barcelona   es ESP     1  38  28   9   1   99  29  70   93   2.45  78.3  41.1  37.2    0.98       66603                            Lionel Messi - 34              Marc-André ter Stegen

...

并保存data.csv(来自 LibreOffice 的屏幕截图):

在此处输入图像描述


推荐阅读