DataFrame.apply в python pandas изменяет как исходные, так и дубликаты DataFrame

У меня возникли проблемы с изменением дублированного кадра данных pandas, и изменения не применяются как к дубликату , так и к исходному кадру данных .

Вот пример. Скажем, я создаю произвольный DataFrame из списка словарей:

In [67]: d = [{'a':3, 'b':5}, {'a':1, 'b':1}]

In [68]: d = DataFrame(d)

In [69]: d

Out[69]: 
   a  b
0  3  5
1  1  1

Затем я присваиваю кадр данных «d» переменной «e» и применяю некоторую произвольную математику к столбцу «a», используя apply:

In [70]: e = d

In [71]: e['a'] = e['a'].apply(lambda x: x + 1)

Проблема возникает в том, что Функция применения, по-видимому, применяется как к дубликату DataFrame 'e', ​​так и к оригинальному DataFrame 'd', что я не могу понять в жизни:

In [72]: e # duplicate DataFrame
Out[72]: 
   a  b
0  4  5
1  2  1

In [73]: d # original DataFrame, notice the alterations to frame 'e' were also applied
Out[73]:  
   a  b
0  4  5
1  2  1

Я искал документацию pandas и Google по причине, почему это было бы так, но безрезультатно. Я вообще не могу понять, что здесь происходит.

Я также пробовал математические операции с использованием поэлементной операции (например, e['a'] = [i + 1 for i in e['a']]), но проблема сохраняется. Есть ли причуда в типе pandas DataFrame, о которой я не знаю? Я ценю любое понимание, которое кто-то может предложить.

5
задан MikeGruz 1 June 2012 в 04:40
поделиться