2014-12-08 2 views
0

Позвольте df быть объектом pandas.DataFrame. Пусть se - объект pandas.Series.добавить строку в базу данных pandas из серии

Столбы df, являются индексами se.

Я хочу добавить новую строку в df из se и установить индекс как 555.

Команда, которую я использую, - df.loc[555]=se.

Это работает, похоже?

Я получаю это Значение, которое нужно установить на копии фрагмента из DataFrame ошибка/предупреждение.

Получаю, я прочитал документацию.

Два вопроса, хотя:

  1. Должен ли я на самом деле заботиться о предупреждении?
  2. Каков рекомендуемый способ сделать это, чтобы предупреждение не всплывало?

Спасибо.

+0

Любой пример входных данных и ожидаемого результата будет полезен. – Marcin

+0

чувствует, что отличный ответ был поставлен без этого. – user3659451

ответ

1
  1. Должен ли я действительно заботиться о предупреждении?

Это зависит. В вашем примере вы сначала ссылаетесь на подмножество данных (df.loc[555]) и затем устанавливаете значения для этого подмножества. Почти всегда pandas делает copy исходных данных, а значения настроек на копии не изменят исходный Dataframe, поэтому предупреждение.

В некоторых случаях pandas будет производить view из исходных данных (например: если все столбцы имеют одинаковый тип dtype.), Значения настроек здесь будут работать как ожидалось.

Если все столбцы в вашей файловой системе имеют одинаковый тип dtype (например: все поплавки), и вы используете iloc по одному существующему индексу, тогда вы получаете представление, и предупреждение можно игнорировать. Если вы устанавливаете несуществующий индекс, вы находитесь Setting with enlargment, это также ожидаемое поведение, и предупреждение также можно игнорировать.

  1. Каков рекомендуемый способ сделать это, чтобы предупреждение не всплывало?

Использование df.loc дал информацию вам при условии, кажется, хорошо. У вас есть несколько альтернатив, чтобы избежать предупреждения:

Во-первых, обновите свою версию панд. Ситуация с этими ложными положительными предупреждениями улучшается с каждой версией, я не получаю ни одного из 0.15.1.

Во-вторых, если вы уверены, что вы делаете, это предполагаемое поведение, то вы можете просто отключить предупреждения в глобальном масштабе с:

pd.set_option('chained_assignment', None) 

Наконец, в некоторых случаях вы можете установить is_copy свойство вашего в результате объект эффективно отключить проверку этого объекта, например:

df_temp = df.loc[555] 
df_temp.is_copy = False 

Обратите внимание, что этот последний вариант может быть использован только на существующих индексов, новых индексов это вызывает KeyError.

Смежные вопросы