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