Определить вид или копию другой панды DataFrame

Интересно, как я мог определить, есть ли у меня представление или копия другого фрейма данных? Учитывая панды.DataFrame

import pandas as pd

df = pd.DataFrame( {'a': [0,8,15], 'b': [42,11,0] } )

а также вид

df1 = df.loc[ 1:2 ]

и копия

df2 = df.loc[ 1:2 ].copy()

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

>>> df
    a   b
0   0  42
1   8  11
2  42   0
>>> df1
    a   b
1   8  11
2  42   0
>>> df2
    a   b
1   8  11
2  42   0

Присвоение значений существующему столбцу приводит к предупреждению для df1

>>> df1[ 'a' ] = 42
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
  #!/usr/bin/python

но не для df2. Однако присвоение значения сработало в обоих случаях. Как я могу узнать, есть ли у меня копия или просто просмотр другого DataFrame?

Обратите внимание, что я не вижу никакой разницы в DataFrames df1 а также df2 по типу

>>> type(df1),type(df2)

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

>>> df1 == df2
      a     b
1  True  True
2  True  True

сравнивая объекты NDFrame

>>> df1.equals

или даже путем сравнения порядка столбцов

>>> from pandas.util.testing import assert_frame_equal
>>> assert_frame_equal(df1, df2)

Обратите внимание, что используя вид df1 также изменяет оригинальный DataFrame.

Возможное дублирование: Pandas: субиндексирование данных: кадры и просмотры

не отвечает, как я мог проверить это на df1 а также df2,

1 ответ

Вы можете установить свойство dataframe заранее, с помощью df.is_copy = True или же df.is_copy = False, последний должен избегать предупреждения.

Другие вопросы по тегам