Поменять местами значения столбцов в Панд

#pandas

Вопрос:

Я читал документацию о Пандах, и у меня возник вопрос. Они говорят

панды выравнивают все ОСИ при настройке рядов и фреймов данных из .loc и .iloc.

Это не изменит df, поскольку выравнивание столбцов выполняется до присвоения значения.

 df.loc[:, ['B', 'A']] = df[['A', 'B']]
 

Это так не работает. Но это так, если вы сделаете что-то вроде :

 df[['B', 'A']] = df[['A', 'B']]
 

Правильный способ поменять местами значения столбцов-использовать необработанные значения:

 df.loc[:, ['B', 'A']] = df[['A', 'B']].to_numpy()
 

Вы можете прочитать это здесь, если хотите получить более подробную информацию.
Почему это происходит? Я не могу понять «выравнивание столбцов перед присвоением значения»..

Ответ №1:

Это означает, что при использовании loc pandas следит за тем, чтобы «А» справа было выровнено по «А» слева, чтобы сохранить значения в правильном столбце, даже если порядок справа неправильный. Выравнивание — это процесс сопоставления A с A и B с B, независимо от предоставленного порядка. Назначение-это процесс сохранения данных в столбцах.

С другой стороны df[['A', 'B']] = ... , нотация создает новые столбцы, которые в данном случае существуют и перезаписываются исходными значениями, указанными справа от операнда, по порядку. Таким образом, обмен.

Комментарии:

1. Таким образом, это означает, что если я использую df[['B', 'A']] = df[['A', 'B']] , то я говорю программе, чтобы она назначала столбцы без изменения порядка столбцов, в то время как, используя loc, панды пытаются выровнять столбцы (A-A и B-B), поэтому A изменяется на A и B на B с результатом, ничего не нужно менять ?

2. Попробуйте заменить «B» на «C» слева от =. С помощью loc вы получите NaN в C, так как выравнивание невозможно , а A остается A. С [] помощью, вы поместите A в C и B в A

3. Я имел в виду: df.loc[:, ['C','A']] = df[['A', 'B']] против df[['C','A']] = df[['A', 'B']]