Це мої два кадри даних, збережені у двох змінних:
> print(df.head())
>
club_name tr_jan tr_dec year
0 ADO Den Haag 1368 1422 2010
1 ADO Den Haag 1455 1477 2011
2 ADO Den Haag 1461 1443 2012
3 ADO Den Haag 1437 1383 2013
4 ADO Den Haag 1386 1422 2014
> print(rankingdf.head())
>
club_name ranking year
0 ADO Den Haag 12 2010
1 ADO Den Haag 13 2011
2 ADO Den Haag 11 2012
3 ADO Den Haag 14 2013
4 ADO Den Haag 17 2014
Я намагаюся об'єднати ці два за допомогою цього коду:
new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')
Додано те, як = 'left', оскільки у моєму rank_df у мене менше точок даних, ніж у моєму стандартному df.
Очікувана поведінка така:
> print(new_df.head())
>
club_name tr_jan tr_dec year ranking
0 ADO Den Haag 1368 1422 2010 12
1 ADO Den Haag 1455 1477 2011 13
2 ADO Den Haag 1461 1443 2012 11
3 ADO Den Haag 1437 1383 2013 14
4 ADO Den Haag 1386 1422 2014 17
Але я отримую цю помилку:
ValueError: Ви намагаєтесь об’єднати стовпці об’єктів та int64. Якщо ви хочете продовжити, вам слід використовувати pd.concat
Але я не хочу використовувати concat, оскільки хочу об'єднати дерева, а не просто додати їх.
Ще одна дивна поведінка на мій погляд - це те, що мій код працює, якщо я зберігаю перший df у .csv, а потім завантажую .csv у фрейм даних.
Код для цього:
df = pd.DataFrame(data_points, columns=['club_name', 'tr_jan', 'tr_dec', 'year'])
df.to_csv('preliminary.csv')
df = pd.read_csv('preliminary.csv', index_col=0)
ranking_df = pd.DataFrame(rankings, columns=['club_name', 'ranking', 'year'])
new_df = df.merge(ranking_df, on=['club_name', 'year'], how='left')
Я думаю, що це пов’язано з параметром index_col = 0. Але я не маю ідеї виправити це без необхідності його зберігати, це не має великого значення, але це свого роду досада, що я повинен це робити.