Как мне изменить несколько панд Dataframes одновременно, используя для цикла - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть два DataFrames, которые почти идентичны по структуре, и я хочу выполнить преобразование / очистку данных на них одновременно.Для этого я создал список, который содержит оба этих DF и циклически перебирает список.

ex:

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
combined = [train, test]
for dataset in combined:
    dataset = dataset.drop(['Age'], axis =1)
    print(dataset.head())

Окончательный оператор печати в для цикл работает нормально - столбец «Возраст» удаляется.Однако, если я немедленно вызову train.head () , то отброшенный столбец все еще присутствует в DataFrame.Создается впечатление, что создаются две копии «train» и «test» - внутри «объединенного» списка и вне.Есть ли что-то, что мне нужно сделать, чтобы эти изменения сохранялись?

Кажется, это должно быть так просто, и это сводит меня с ума!

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

В дополнение к ответу @ sacul, есть более распространенные способы изменения значений в списке:

lst = [1,2,3,4] # any list
for i, elem in enumerate(lst):
    lst[i] = elem + 1 # can be any method here
lst
Out[24]: [2, 3, 4, 5]
0 голосов
/ 29 ноября 2018

Вы создаете новую переменную набора данных в каждом цикле, и над ними выполняется операция.Таким образом, вы действительно, как вы говорите, создаете копии обучающих программ и тестов.Вам нужно drop этого столбца inplace, а не переназначать:

train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')
combined = [train, test]
for dataset in combined:
    dataset.drop(['Age'], axis = 1, inplace=True)
    # print(dataset.head())

Обратите внимание, что другим решением будет просто игнорировать эти столбцы, когда вы загрузить их :

train = pd.read_csv('train.csv', usecols=lambda x: x!='Age')
test = pd.read_csv('test.csv', usecols=lambda x: x!='Age')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...