Создание столбцов df, уникальных для одного столбца, навсегда вне функции df l oop - PullRequest
0 голосов
/ 29 мая 2020

Примечание: исправление - код возвращает AttributeError: объект 'str' не имеет атрибута 'drop_duplicates'

Я пытаюсь выполнить l oop через несколько dfs и уменьшить мои Столбец user_id для только уникальных значений с использованием функции df.drop_duplicates(subset =['user_id'].

Мне нужно, чтобы это было глобальное изменение, и я пытаюсь включить его в свою функцию, которая импортирует файлы .csv и назначает их их имени файла . Это работает отлично, но когда я пытаюсь добавить функцию drop_duplicates, она, похоже, ничего не делает:

def assign_vars(files = os.listdir()):
    # Make list of variable names using file name
    variables = [make_var(file) for file in files]
    # Start list to place dfs into
    dfs = []
    for var,file in zip(variables,files):
        # Use globals to assign dfs to file names
        globals()[var] = pd.read_csv(file)
        #<<1>>
        # Add each newly made df var to a list
        dfs.append(var.drop_duplicates(subset =['user_id'])) # rmv duplicates
    return print('Your variables are: ',sorted(dfs))

Это возвращает ошибку атрибута. Кажется, что var обрабатывается как str вместо df

Когда I len() df, они остаются такими же, как и раньше. Хотя, когда я индивидуально df.drop_duplicates, они укорачиваются в len() примерно на 70%.

В качестве альтернативы, я попытался создать средний объект в <<1>>, а затем .drop_duplicates. Это не работает, и я считаю, что это происходит потому, что изменение остается локальным.

1 Ответ

0 голосов
/ 29 мая 2020

Исправление

Добавление .drop_duplicates(subset =['user_id']) в конец импорта csv, поскольку они становятся глобализированными, похоже, помогло.

def assign_vars(files = os.listdir()):
    # Make list of variable names using file name
    variables = [make_var(file) for file in files]
    # Start list to place dfs into
    dfs = []
    for var,file in zip(variables,files):
        # Use globals to assign dfs to file names
        globals()[var] = pd.read_csv(file).drop_duplicates(subset =['user_id'])
        # Add each newly made df var to a list
        dfs.append(var) # rmv duplicates
    return print('Your variables are: ',sorted(dfs))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...