#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. Большое вам спасибо за ваше объяснение, я действительно ценю вашу помощь!