【问题标题】:pandas.series.copy doesn't create new objectpandas.series.copy 不会创建新对象
【发布时间】:2013-11-14 10:59:19
【问题描述】:

我使用熊猫版本 0.12.0。以及以下代码,它移动了复制系列的索引:

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

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

【问题讨论】:

  • 不知道是bug还是什么,但是如果你检查索引是否相等,你会看到 series_copy.index 等于 series.index - series.index.equals(series_copy.index) 返回True

标签: python pandas series


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-03
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    相关资源
    最近更新 更多