pandas.series.copy不会创建新对象

时间:2013-11-14 10:59:19

标签: python pandas series

我使用pandas版本0.12.0。和以下代码移动复制系列的索引:

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

如果我现在访问series,它也会移动索引。为什么呢?

1 个答案:

答案 0 :(得分: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