Ответ для старых версий pandas, в последней версии pandas все работает хорошо, это означает, что нет необходимости преобразовывать в numpy массивы или переименовывать столбцы.
Причина называется выравниванием индекса, здесь назначены разные имена столбцов c,d
до a,b
столбцов, поэтому не удалось. Для предотвращения этого используется преобразование выбранного DataFrame в массив numpy, потому что массив не имеет столбцов, поэтому работает хорошо.
Или вы можете использовать rename
для одинаковых имен столбцов в обоих DataFrames:
df = pd.DataFrame({
'a':list('abcdef'),
'b':[4,5,4,5,5,4],
'c':[7,8,9,4,2,3],
'd':[1,3,5,7,1,0],
})
df.loc[:, ['a', 'b']] = df.loc[:, ['c', 'd']].rename(columns={'c':'a', 'd':'b'})
print (df)
a b c d
0 7 1 7 1
1 8 3 8 3
2 9 5 9 5
3 4 7 4 7
4 2 1 2 1
5 3 0 3 0
В Серии нет колонок, поэтому работаю хорошо.