Попытка объединить 2 кадра данных, но получить ValueError - PullRequest
0 голосов
/ 01 июня 2018

Это мои два кадра данных, сохраненные в двух переменных:

> 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')

How = '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.Но я не имею ни малейшего представления, чтобы исправить это без необходимости сохранять его, это не имеет большого значения, но отчасти раздражает, что я должен это сделать.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Это происходит, когда общие столбцы в обеих таблицах имеют разные типы данных.

Пример: в таблице1 у вас есть дата в качестве строки, тогда как в таблице 2 у вас есть дата как дата / времяпоэтому перед объединением нам нужно изменить date на общий тип данных.

0 голосов
/ 01 июня 2018

В одном из ваших фреймов данных год представляет собой строку, а другой - int64, вы можете сначала преобразовать его, а затем присоединить (например, df['year']=df['year'].astype(int) или, как предложил RafaelC df.year.astype(int))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...