Подтвердить что ты не робот

Python: Pandas Dataframe как умножить весь столбец со скаляром

Как я могу умножить каждый элемент данного столбца моего фрейма данных на скаляр? (Я пробовал смотреть на SO, но не могу найти правильное решение)

Выполнение чего-то вроде:

df['quantity'] *= -1 # trying to multiply each row quantity column with -1

дает мне предупреждение:

A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

Примечание. Если возможно, я не хочу выполнять итерацию над фреймворком данных и делать что-то вроде этого... так как я думаю, что любая стандартная математическая операция на всем столбце должна быть возможной, не имея необходимости писать цикл:

for idx, row in df.iterrows():
    df.loc[idx, 'quantity'] *= -1

ИЗМЕНИТЬ:

Я запускаю 0.16.2 из Pandas

полная трассировка:

 SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self.obj[item] = s
4b9b3361

Ответ 1

Здесь ответ после небольшого исследования:

df.loc[:,'quantity'] *= -1 #seems to prevent SettingWithCopyWarning 

Ответ 2

попробуйте использовать функцию apply.

df['quantity'] = df['quantity'].apply(lambda x: x*-1)

Ответ 3

Примечание: для тех, кто использует панды 0.20.3 и выше и ищет ответ, все эти опции будут работать:

df = pd.DataFrame(np.ones((5,6)),columns=['one','two','three',
                                       'four','five','six'])
df.one *=5
df.two = df.two*5
df.three = df.three.multiply(5)
df['four'] = df['four']*5
df.loc[:, 'five'] *=5
df.iloc[:, 5] = df.iloc[:, 5]*5

что приводит к

   one  two  three  four  five  six
0  5.0  5.0    5.0   5.0   5.0  5.0
1  5.0  5.0    5.0   5.0   5.0  5.0
2  5.0  5.0    5.0   5.0   5.0  5.0
3  5.0  5.0    5.0   5.0   5.0  5.0
4  5.0  5.0    5.0   5.0   5.0  5.0

Ответ 4

Немного устарел, но я все еще получал тот же набор настроекWithCopyWarning. Вот мое решение:

df.loc[:, 'quantity'] = df['quantity'] * -1

Ответ 5

Более поздние версии панд имеют функцию pd.DataFrame.multiply.

df['quantity'] = df['quantity'].multiply(-1)

Ответ 6

Попробуйте df['quantity'] = df['quantity'] * -1.

Ответ 7

Я получил это предупреждение, используя Pandas 0.22. Вы можете избежать этого, очень явно используя метод assign:

df = df.assign(quantity = df.quantity.mul(-1))

Ответ 8

Немного опоздал к игре, но для будущих искателей это тоже должно сработать:

df.quantity = df.quantity  * -1

Ответ 9

Вы можете использовать индекс столбца, для которого вы хотите применить умножение

df.loc[:,6] *= -1

Это умножит столбец с индексом 6 на -1.