Определить вид или копию другой панды 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
, последний должен избегать предупреждения.