Переназначение столбцов pandas в цепочке .assign() дает неверные значенияPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Переназначение столбцов pandas в цепочке .assign() дает неверные значения

Сообщение Anonymous »

Я часто следую соглашению (к лучшему или к худшему) загрузки данных и манипуляций с предварительной обработкой в ​​одной строке связанных команд pandas. В одной из таких манипуляций мне нужно умножить набор столбцов на скалярное значение, и я подумал, что могу добиться этого, используя синтаксис .assign(**kwargs) с соответствующим словарем пар, вызываемых ключевым словом. Однако при этом я получаю неправильные значения. Вероятно, я упускаю из виду какую-то проблему, связанную с пониманием диктовок, изменяемыми объектами и/или лямбда-функциями. Я надеюсь, что кто-нибудь сможет сообщить мне, почему/что происходит в прилагаемом минимальном рабочем примере. Также приветствуются любые предложения по улучшению практики. Заранее спасибо.
import sys
import pandas as pd

print(f'python version: {sys.version.split()[0]}')
print(f'pandas version: {pd.__version__}\n')

# dataframe
df = pd.DataFrame({'i1': [0.001, -0.30, -0.018, 0., 0.],
'i2': [0.001, -0.029, -0.007, 0., 0.],
'i3': [0., -0.03, -0.004, 0., 0.]})
print('##### df')
print(df)

# re-assigned dataframe: values are different from df, expected to be the same
# looks like i3 is simply copied into i1 and i2
print('\n##### df after reassignment')
df2 = df.assign(**{key: lambda df: 1*df[key] for key in ['i1', 'i2', 'i3']})
print(df2)

# piped dataframe: values are same as df, expected to be the same
def pipe_func(df, keys):
df[keys] = 1*df[keys]
return df

print('\n##### df after pipe_func')
df3 = df.pipe(pipe_func, keys=['i1', 'i2', 'i3'])
print(df3)

Мой результат:
python version: 3.9.16
pandas version: 2.0.3

##### df
i1 i2 i3
0 0.001 0.001 0.000
1 -0.300 -0.029 -0.030
2 -0.018 -0.007 -0.004
3 0.000 0.000 0.000
4 0.000 0.000 0.000

##### df after reassignment
i1 i2 i3
0 0.000 0.000 0.000
1 -0.030 -0.030 -0.030
2 -0.004 -0.004 -0.004
3 0.000 0.000 0.000
4 0.000 0.000 0.000

##### df after pipe_func
i1 i2 i3
0 0.001 0.001 0.000
1 -0.300 -0.029 -0.030
2 -0.018 -0.007 -0.004
3 0.000 0.000 0.000
4 0.000 0.000 0.000


Подробнее здесь: https://stackoverflow.com/questions/792 ... ect-values
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Pandas `.assign` нескольким столбцам из одной функции
    Anonymous » » в форуме Python
    0 Ответы
    96 Просмотры
    Последнее сообщение Anonymous
  • Использование pandas `.assign()` для создания столбца, содержащего строковый скаляр
    Anonymous » » в форуме Python
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous
  • Как мне правильно проанализировать это переназначение значения?
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Ошибка запроса API API API. Неверные параметры неверные параметры
    Anonymous » » в форуме Python
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Java LocalDateTime Serialized Вывод дает неверные значения
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»