почему я получаю aue пытается установить копию фрагмента из предупреждения DataFrame - PullRequest
0 голосов
/ 27 ноября 2018

при запуске следующего кода:

import pandas as pd
df = pd.DataFrame({"A": [1,2,3],"B": [2,4,8]})
df2 = df[df["A"] < 3]
df2["C"] = 100

Я получаю следующее предупреждение:

SettingWithCopyWarning: значение пытается быть установлено для копии среза изDataFrame.Попробуйте вместо этого использовать .loc [row_indexer, col_indexer] = value. Смотрите предостережения в документации: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

, но это именно то поведение, которое мне нужно (реальная таблица очень большая, и я нене хочу делать копии этого), почему я получаю предупреждение?почему это рискованно?

df

   A  B
0  1  2
1  2  4
2  3  8

df2

   A  B    C
0  1  2  100
1  2  4  100

1 Ответ

0 голосов
/ 27 ноября 2018

Почему это происходит?

Поскольку df2 является копией фрагмента df.

Почему это рискованно?

Это сообщение о том, что df2 и df - это разные вещи.Это было введено, потому что не всегда было очевидно, что они были.

Возьмите пример кода из документов:

def do_something(df):
   foo = df[['bar', 'baz']]  # Is foo a view? A copy? Nobody knows!
   # ... many lines here ...
   foo['quux'] = value       # We don't know whether this will modify df or not!
   return foo

Как мне решить это?

Либо путем явного копирования фрагмента:

df2 = df[df['A'] < 3].copy()
df2['C'] = 100

, либо с помощью loc:

df.loc[df['A'] < 3, 'C'] = 100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...