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


Одна ошибка, с которой вы можете столкнуться при использовании 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