4

df2別のデータフレームのコピーであるデータフレームがあります:

In [5]: df = DataFrame({"A":[1,2,3],"B":[4,5,6],"C":[7,8,9]})
In [6]: df
Out[6]:
   A  B  C
0  1  4  7
1  2  5  8
2  3  6  9

In [7]: df2 = df.copy()

したがって、同じオブジェクトではありません。

In [8]: df is df2
Out[8]: False

In [9]: hex(id(df))
Out[9]: '0x89c6550L'

In [10]: hex(id(df2))
Out[10]: '0x89c6a58L'

私の質問は、これら 2 つのデータフレームの列に関するものです。df.columnsから返された列オブジェクトdf2.columnsが同じオブジェクトであるのはなぜですか?

In [11]: df.columns is df2.columns
Out[11]: True

In [12]: hex(id(df.columns))
Out[12]: '0x89bfb38L'

In [13]: hex(id(df2.columns))
Out[13]: '0x89bfb38L'

しかし、変更を加えると、それらは 2 つの別個のオブジェクトになりますか?

In [14]: df2.rename(columns={"B":"D"}, inplace=True)

In [15]: df.columns
Out[15]: Index([A, B, C], dtype=object)

In [16]: df2.columns
Out[16]: Index([A, D, C], dtype=object)

In [17]: df.columns is df2.columns 
Out[17]: False

In [18]: hex(id(df.columns))
Out[18]: '0x89bfb38L'

In [19]: hex(id(df2.columns))
Out[19]: '0x89bfc88L'

誰かがここで何が起こっているのか説明できますか? 最初から2つの別々のオブジェクトでdf.columnsはないのはなぜですか?df2.columns

4

1 に答える 1