не удалось передать входной массив из формы (30) в форму (31)

#python #arrays #data-cleaning #shapes #valueerror

Вопрос:

Я использую этот учебник для очистки футбольных данных. Учебник

Когда я пытаюсь выполнить этот фрагмент кода для своих данных:

     # Gets the goals scored agg arranged by teams and matchweek
    def get_goals_scored(playing_stat):
    # Create a dictionary with team names as keys
    teams = {}
    for i in playing_stat.groupby('HomeTeam').mean().T.columns:
        teams[i] = []
    
    # the value corresponding to keys is a list containing the match location.
    for i in range(len(playing_stat)):
        HTGS = playing_stat.iloc[i]['FTHG']
        ATGS = playing_stat.iloc[i]['FTAG']
        teams[playing_stat.iloc[i].HomeTeam].append(HTGS)
        teams[playing_stat.iloc[i].AwayTeam].append(ATGS)
    
    # Create a dataframe for goals scored where rows are teams and cols are matchweek.
    GoalsScored = pd.DataFrame(data=teams, index = [i for i in range(1,37)]).T
    GoalsScored[0] = 0
    # Aggregate to get uptil that point
    for i in range(2,37):
        GoalsScored[i] = GoalsScored[i]   GoalsScored[i-1]
    return GoalsScored



# Gets the goals conceded agg arranged by teams and matchweek
def get_goals_conceded(playing_stat):
    # Create a dictionary with team names as keys
    teams = {}
    for i in playing_stat.groupby('HomeTeam').mean().T.columns:
        teams[i] = []
    
    # the value corresponding to keys is a list containing the match location.
    for i in range(len(playing_stat)):
        ATGC = playing_stat.iloc[i]['FTHG']
        HTGC = playing_stat.iloc[i]['FTAG']
        teams[playing_stat.iloc[i].HomeTeam].append(HTGC)
        teams[playing_stat.iloc[i].AwayTeam].append(ATGC)
    
    # Create a dataframe for goals scored where rows are teams and cols are matchweek.
    GoalsConceded = pd.DataFrame(data=teams, index = [i for i in range(1,37)]).T
    GoalsConceded[0] = 0
    # Aggregate to get uptil that point
    for i in range(2,37):
        GoalsConceded[i] = GoalsConceded[i]   GoalsConceded[i-1]
    return GoalsConceded

def get_gss(playing_stat):
    GC = get_goals_conceded(playing_stat)
    GS = get_goals_scored(playing_stat)
   
    j = 0
    HTGS = []
    ATGS = []
    HTGC = []
    ATGC = []

    for i in range(313):
        ht = playing_stat.iloc[i].HomeTeam
        at = playing_stat.iloc[i].AwayTeam
        HTGS.append(GS.loc[ht][j])
        ATGS.append(GS.loc[at][j])
        HTGC.append(GC.loc[ht][j])
        ATGC.append(GC.loc[at][j])
        
        if ((i   1)% 10) == 0:
            j = j   1
        
    playing_stat['HTGS'] = HTGS
    playing_stat['ATGS'] = ATGS
    playing_stat['HTGC'] = HTGC
    playing_stat['ATGC'] = ATGC
    
    return playing_stat


# Apply to each dataset
playing_statistics_1 = get_gss(playing_statistics_1)
playing_statistics_2 = get_gss(playing_statistics_2)
playing_statistics_3 = get_gss(playing_statistics_3)
playing_statistics_4 = get_gss(playing_statistics_4)
 

Я получаю эту ошибку: ValueError: could not broadcast input array from shape (34) into shape (36)

Мои данные содержат 313 записей и выглядят так:

Данные.голова(20)

Я знаю, что это как-то связано с длиной данных, но я не могу точно понять, что это такое.

Любая помощь очень ценится, и если нужна какая-либо дополнительная информация, пожалуйста, сообщите мне!

Комментарии:

1. Сообщение об ошибке обычно указывает на строку, в которой произошла ошибка. Не могли бы вы поделиться этим, пожалуйста? (Кроме того, я знаю, что суть вопроса не в этом, и я сую свой нос, но в этом учебнике есть некоторые сомнительные методы кодирования (много повторений), поэтому, если вы хотите изучать панд, а не просто получать данные, я предлагаю поискать другие учебные пособия для дополнения)

Ответ №1:

Хотя в этом уроке требуется довольно много исправлений (я не собираюсь вдаваться в это). Я вообще не получаю этой ошибки. Возможно ли, что один из файлов поврежден, когда вы его загрузили (я получаю 380 строк/записей, а не 318)?? Попробуйте изменить первый блок, в котором вы читаете файлы локально, на приведенный ниже код, чтобы вы читали файл непосредственно из источника. Доложите, что происходит:

 loc = "https://raw.githubusercontent.com/RudrakshTuwani/Football-Data-Analysis-and-Prediction/master/Datasets/"

raw_data_1 = pd.read_csv(loc   '2000-01.csv')
raw_data_2 = pd.read_csv(loc   '2001-02.csv')
raw_data_3 = pd.read_csv(loc   '2002-03.csv')
raw_data_4 = pd.read_csv(loc   '2003-04.csv')
raw_data_5 = pd.read_csv(loc   '2004-05.csv')
raw_data_6 = pd.read_csv(loc   '2005-06.csv')
raw_data_7 = pd.read_csv(loc   '2006-07.csv')
raw_data_8 = pd.read_csv(loc   '2007-08.csv')
raw_data_9 = pd.read_csv(loc   '2008-09.csv')
raw_data_10 = pd.read_csv(loc   '2009-10.csv')
raw_data_11 = pd.read_csv(loc   '2010-11.csv')
raw_data_12 = pd.read_csv(loc   '2011-12.csv')
raw_data_13 = pd.read_csv(loc   '2012-13.csv')
raw_data_14 = pd.read_csv(loc   '2013-14.csv')
raw_data_15 = pd.read_csv(loc   '2014-15.csv')
raw_data_16 = pd.read_csv(loc   '2015-16.csv')
 

Комментарии:

1. Спасибо за ответ! Ошибка произошла из-за того, что разные команды в моих данных не сыграли одинаковое количество игр, поэтому в них отсутствовали некоторые из разных команд.