#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 в A3. Я имел в виду:
df.loc[:, ['C','A']] = df[['A', 'B']]
противdf[['C','A']] = df[['A', 'B']]