Панды: озадачивающее поведение при просмотре и копировании - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь понять индексацию представления-копии-копии в пандас-фреймах данных и столкнулся с этим странным поведением.

Ниже приведено то, что я пытался из примера :

import pandas as pd

dfmi = pd.DataFrame([list('abcd'),
                      list('efgh'),
                      list('ijkl'),
                      list('mnop')],
                     columns=pd.MultiIndex.from_product([['one', 'two'],
                                                         ['first', 
'second']]))

Итак, dfmi имеет исходное значение:

one     two
    first   second  first   second
0   a   b   c   d
1   e   f   g   h
2   i   j   k   l
3   m   n   o   p

Теперь приходит мой сценарий:

df = dfmi['one']['second'] # view or copy?

df['one'] = 2 # If commenting out this line, original dfmi gets updated!

df[2] = 5

Поведение df сбивает с толку:

  • Если я запусту вышеуказанный скрипт в блокноте jupyter как есть, значение dfmi не изменится вообще. И он генерирует предупреждение SettingWithCopyWarning.

  • Если я закомментирую вторую последнюю строку, dfmi изменится на:

one     two
    first   second  first   second
0   a   b   c   d
1   e   f   g   h
2   i   5   k   l   <= updated row !!
3   m   n   o   p

Мой вопрос:

  1. Когда я делаю
df = dfmi['one']['second'] # view or copy?

это просмотр или копирование?

Что меняется незаметно, когда я делаю:
df['one'] = 2
df[2] = 5

и почему это повлияет на вторую строку?

Это связано с тем, как я получаю доступ к df по целочисленному индексу?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...