Как исправить: столбцы перекрываются, но суффикс не указан


Одна ошибка, с которой вы можете столкнуться при использовании pandas:

ValueError : columns overlap but no suffix specified: Index(['column'], dtype='object')

Эта ошибка возникает, когда вы пытаетесь объединить два фрейма данных, которые имеют по крайней мере одно общее имя столбца, и для левого или правого фрейма данных не указан суффикс, чтобы различать столбцы в новом фрейме данных.

Есть два способа исправить эту ошибку:

Решение 1. Укажите суффиксы имен.

df1.join(df2, how = 'left', lsuffix='left', rsuffix='right')

Решение 2. Вместо этого используйте функцию слияния.

df1.merge(df2, how = 'left')

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы пытаемся объединить следующие два фрейма данных:

import pandas as pd

#create first data frame
df1 = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E', 'F'],
 'points': [5, 7, 7, 9, 12, 9],
 'assists': [11, 8, 10, 6, 6, 5]})

#create second data frame
df2 = pd.DataFrame({'player': ['A', 'B', 'C', 'D', 'E', 'F'],
 'rebounds': [4, 4, 6, 9, 13, 16],
 'steals': [2, 2, 1, 4, 3, 2]})

#attempt to perform left join on data frames
df1.join(df2, how = 'left')

ValueError : columns overlap but no suffix specified: Index(['player'], dtype='object')

Мы получаем сообщение об ошибке, потому что два фрейма данных имеют общий столбец «игрок», но для левого или правого фрейма данных нет суффикса, позволяющего различать столбцы в новом фрейме данных.

Как исправить ошибку

Один из способов исправить эту ошибку — указать суффикс имени для левого или правого фрейма данных:

#perform left join on data frames with suffix provided
df1.join(df2, how = 'left', lsuffix='left', rsuffix='right')

 playerleft points assists playerright rebounds steals
0 A 5 11 A 4 2
1 B 7 8 B 4 2
2 C 7 10 C 6 1
3 D 9 6 D 9 4
4 E 12 6 E 13 3
5 F 9 5 F 16 2

Другой способ исправить эту ошибку — просто использовать функцию merge() , которая не сталкивается с этой проблемой при объединении двух фреймов данных вместе:

#merge two data frames
df1.merge(df2, how = 'left')

 player points assists rebounds steals
0 A 5 11 4 2
1 B 7 8 4 2
2 C 7 10 6 1
3 D 9 6 9 4
4 E 12 6 13 3
5 F 9 5 16 2

Обратите внимание, что функция merge() просто удаляет любые имена из второго фрейма данных, которые уже принадлежат первому фрейму данных.

Дополнительные ресурсы

Как объединить два кадра данных Pandas в индексе
Как объединить Pandas DataFrames в несколько столбцов
Как добавить массив Numpy в фрейм данных Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.