Панды удаляют столбец в скопированной таблице, но исходная таблица будет следовать, чтобы удалить этот столбец

#python #pandas

#python #pandas

Вопрос:

Я пытаюсь понять эту проблему, но я не нашел решения, возможно, вопрос поиска неверен. Здесь, чтобы уточнить мой вопрос, я сделал копию таблицы (исходная таблица с именем toy_table), скопированная таблица называется copy_toy_table .

 toy_table = pd.DataFrame(np.array([[100, 2, 3], [288, 8, 9], [105, 5, 6], [207, 10, 9]]), columns=['a', 'b', 'c'])
toy_table
 

введите описание изображения здесь

Я просто создаю копию таблицы с именем copy_toy_table

 copy_toy_table = toy_table
copy_toy_table
 

введите описание изображения здесь

Затем я хотел бы удалить строку в copy_toy_table, отфильтровав определенное значение на основе столбца

 delete_index = copy_toy_table[copy_toy_table['a'] < 200 ].index
copy_toy_table.drop(delete_index , inplace=True)
 

Как и требовалось, строка, значение которой меньше 200 в столбце «a», была удалена.

введите описание изображения здесь

Однако, когда я проверяю исходную таблицу toy_table, я обнаружил, что та же самая строка, у которой меньше 200 в столбце «a», была удалена. Я предполагал, что на toy_table это не повлияет, поскольку я делаю только удаление в copy_toy_table

введите описание изображения здесь

Я очень хочу получить ваш совет. Я действительно ценю и буду учиться на этом. Спасибо.

Комментарии:

1. вы должны сделать копию copy_toy_table = toy_table.copy()

2. Это copy_toy_table = toy_table не создает копию

3. Привет, Анки и Дани, спасибо за совет, теперь я понял, я действительно ценю ваш вклад!

Ответ №1:

просто сделайте настоящую копию, а не ссылку:

 copy_toy_table = toy_table.copy()
 

объяснение

когда вы вызывали copy_toy_table = toy_table , вы не делали копию, вы ссылались на тот же объект с другим именем, и если вы не собираетесь ссылаться на него снова, все действия, которые вы производите над ним, будут отражаться на другом объекте…

кроме того, вы могли бы сделать…

 toy_table = pd.DataFrame(np.array([[100, 2, 3], [288, 8, 9], [105, 5, 6], [207, 10, 9]]), columns=['a', 'b', 'c'])
delete_index = toy_table [toy_table['a'] < 200 ].index
copy_toy_table = toy_table.drop(delete_index) # without inplace arg

copy_toy_table 
Out[x]: 
     a   b  c
1  288   8  9
3  207  10  9

toy_table
Out[x   1]: 
     a   b  c
0  100   2  3
1  288   8  9
2  105   5  6
3  207  10  9
 

Ответ №2:

Настройка:

 import pandas as pd
import numpy as np
toy_table = pd.DataFrame(np.array([[100, 2, 3], [288, 8, 9], [105, 5, 6], [207, 10, 9]]), columns=['a', 'b', 'c'])
toy_table

copy_toy_table = toy_table.copy()
copy_toy_table

delete_index = copy_toy_table[copy_toy_table['a'] < 200 ].index
copy_toy_table.drop(delete_index , inplace=True)
 

Вывод:

 In[1]: copy_toy_table
Out[2]: 
     a   b  c
1  288   8  9
3  207  10  9

toy_table
Out[3]: 
     a   b  c
0  100   2  3
1  288   8  9
2  105   5  6
3  207  10  9
 

Комментарии:

1. Большое вам спасибо за ваше объяснение, я действительно ценю вашу помощь!