4

ビューまたは別のデータフレームのコピーがあるかどうかをどのように識別できるのだろうか。与えられた pandas.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 のコピーを持っているのか、単にビューを持っているだけなのかを確認するにはどうすればよいですか?

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 も変更されることに注意してください。

重複の可能性:パンダ: データフレームのサブインデックス作成: コピーとビュー

df1と でこれを確認する方法には答えませんdf2

4

1 に答える 1

0

df.is_copy = Trueまたはを使用して、データフレームのプロパティを事前に設定できますdf.is_copy = False。後者は警告を回避する必要があります。

于 2015-09-15T07:47:05.453 に答える