2013-11-14 7 views
5

私はパンダバージョン0.12.0を使用しています。コピーされた一連の指標をシフトし、次のコード:pandas.series.copyは新しいオブジェクトを作成しません

import pandas as pd 
series = pd.Series(range(3)) 
series_copy = series.copy() 
series_copy.index += 1 

私は今seriesにアクセスした場合、それはまた、インデックスがシフトしています。どうして?

+0

バグかどうかわかりませんが、インデックスが等しいかどうかを確認すると、series_copy.indexはseries.index - 'series.index.equals(series_copy.index)'と等しくなります。 'True'を返します。 –

答えて

5

copyは、下位の配列のコピーを行うヘルパーとして定義されており、関数はインデックスをコピーしません。

Definition: series.copy(self, order='C') 
Source: 
    def copy(self, order='C'): 
     """ 
     Return new Series with copy of underlying values 

     Returns 
     ------- 
     cp : Series 
     """ 
     return Series(self.values.copy(order), index=self.index, 
         name=self.name) 

index建設で共有まま:ソースコードを参照してください。あなたはより深いコピーをしたい場合は、単に直接Seriesのコンストラクタを使用します。

series = pd.Series(range(3)) 
    ...: series_copy = pd.Series(series.values.copy(), index=series.index.copy(), 
    ...:       name=series.name) 
    ...: series_copy.index += 1 

series 
Out[72]: 
0 0 
1 1 
2 2 
dtype: int64 

series_copy 
Out[73]: 
1 0 
2 1 
3 2 
dtype: int64 

は0.13で、copy(deep=True)はあなたの問題を解決するコピーのデフォルトのインタフェースです。 (Fix is here

関連する問題