Пусть df будет моим файлом данных pandas и dfcopy его копией,
data = [[1,['A1']],[3,['A2','A2','A1']], [1,['A2']]]
df = pd.DataFrame(data)
dfcopy = df.copy()
0 1
0 1 ['A1']
1 3 ['A2', 'A2', 'A1']
2 1 ['A2']
идентификатор df - 1874789864000, а идентификатор dfcopy - 1874789865736. Отличается, как и ожидалось.
Теперь я хочу удалить one 'A2' в позиции dfcopy [1,1] и уменьшить dfcopy [1,0] с помощью one (столбец 0 - длина списка в столбце 1)
dfcopy.at[1,0]=dfcopy.at[1,0]-1
df =
0 1
0 1 ['A1']
1 3 ['A2', 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 ['A2', 'A2', 'A1']
2 1 ['A2']
Как я и ожидал, количество в столбце 0 уменьшается только при dfcopy.
Теперь я удаляю 'A2' элемента dfcopy [1,1]
dfcopy.at[1,1].remove('A2')
df =
0 1
0 1 ['A1']
1 3 [ 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 [ 'A2', 'A1']
2 1 ['A2']
Идентификаторы все те же, что и раньше (не показаны), но теперь мой df изменен в позиции df [1,1]
почему это происходит, пока я определяю копию, и как мне это исправить?
intended output:
df =
0 1
0 1 ['A1']
1 3 [ 'A2', 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 [ 'A2', 'A1']
2 1 ['A2']
Я много смотрел в документальном фильме и здесь, в Stackoverflow, но не понимаю, почему это происходит.
ВРЕМЕННОЕ РЕШЕНИЕ
data = [[1,['A1']],[3,['A2','A2','A1']], [1,['A2']]]
df = pd.DataFrame(data)
dfcopy = df.copy()
dfcopy.at[1,0]=dfcopy.at[1,0]-1
list = list(dfcopy.at[1,1])
list.remove('A2')
dfcopy.at[1,1] = list
df =
0 1
0 1 ['A1']
1 3 [ 'A2', 'A2', 'A1']
2 1 ['A2']
dfcopy =
0 1
0 1 ['A1']
1 2 [ 'A2', 'A1']
2 1 ['A2']