pandas.series.copy не создает новый объект

Я использую панды версии 0.12.0. и следующий код, который сдвигает индекс скопированного ряда:

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

Если я сейчас доступ 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) является интерфейсом по умолчанию для копирования, который решит вашу проблему. ( Исправление здесь)

Другие вопросы по тегам