Переименуйте словарный ключ с помощью для l oop в Python 3.7. - PullRequest
0 голосов
/ 13 февраля 2020

У меня большой массив данных со многими именами переменных длиной более 32 символов. Поскольку я хочу экспортировать df в STATA, который имеет ограничение в 32 символа на имя переменной, мне нужно изменить имена переменных в df и соответствующем словаре, содержащем те же имена переменных и их метки. Мне нужна помощь с последним.

Поскольку у меня много переменных, которые начинаются с одного и того же имени, я подумал о том, чтобы изменить их через a для l oop.

Рассмотрим следующие имена переменных:

  • variable_name_is_too_long_1
  • variable_name_is_too_long_50

Желаемый вывод:

  • variable_is_too_long_1
  • variable_is_too_long_50

Что я сделал:

for i in [col for col in df if col.startswith('variable_name_')]:
    df.rename(columns={i:i.replace('_name','',1)},inplace=True)
    dict_labels[i.replace('_name','',1)] = dict_labels.pop(i)

Столбцы переименованы правильно. Однако со словарем dict_labels ничего не происходит (ошибки не выдается), и я не могу объяснить это, поскольку входные данные кажутся правильными. Любой другой, более эффективный способ приветствуется! Спасибо за вашу помощь!

Ответы [ 2 ]

1 голос
/ 13 февраля 2020
rename_labels = {col: col.replace("name_", "") for col in list(df.columns) if col.startswith("variable_name_")}

df.rename(columns = rename_labels, inplace = True)

dict_labels = {v: k for k, v in rename_labels.items()}
1 голос
/ 13 февраля 2020

Попробуйте со следующим:

for i in [col for col in df if col.startswith('variable_name_')]:
    df.rename(columns={i:i.replace('_name','',1)},inplace=True)
    aux = i.replace('_name','',1)
    dict_label[aux] = dict_label.pop(i) 
...