Как извлечь имя переменной в функции Python

У меня есть пользовательская функция Python, которая использует входные данные модели для создания фрейма данных прогнозируемых значений y, вероятностей и некоторых других функций. Я пытаюсь извлечь имя физической переменной и использовать его как столбец во фрейме данных. В функции переменная модели означает определенную модель. Можно ли извлечь физическую строку и использовать ее для создания нового столбца?

Ниже приведен чрезвычайно простой воспроизводимый пример моего кода.

from sklearn.linear_model import LogisticRegression 
import pandas as pd```

df = {'odds_h': [150, 200, -300]}

log_reg = LogisticRegression()

def model_summary(model):
    
    df_summary = pd.DataFrame({'odds_h': df['odds_h'],
                               'model_type': model})
    
    return(df_summary)

model_summary(log_reg)

Вот что в настоящее время отображает вывод фрейма данных

текущий выход

Вот предполагаемый результат

желаемый результат


person mf17    schedule 11.05.2021    source источник
comment
Каким точно является ожидаемое имя физической переменной/физическая строка? Вы хотите получить "model"? Пожалуйста, предоставьте образец ввода и вывода.   -  person Gino Mempin    schedule 11.05.2021
comment
В переменной внутри функции я буду использовать определенные модели, такие как log_reg, gbc, rf и т. д. Я хотел бы вызывать ввод непосредственно как текст в столбце во фрейме данных. Я добавил в примерах выше   -  person mf17    schedule 11.05.2021


Ответы (1)


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

  • get_var_name может дать несколько результатов, если у вас есть переменная лота с одинаковым значением.
  • easy_way может быть немного сложным в использовании, нужно передать имя переменной.
  • dict_way нужно передать dict в функцию.

Также вы можете увидеть эту ссылку, чтобы получить больше решений.

python получает имя переменной аргумента в функции

Как получить исходную переменную имя переменной, переданной функции

код:

def get_var_name(arg):
    return [k for k,v in globals().items() if v == arg]

def easy_way(arg,name):
    #dosomething with arg
    return name

def dict_way(**kwargs):
    for arg_name in kwargs:
        return arg_name

a = 1
b = 1
c = 2
print(get_var_name(a))
print(easy_way(a,"a"))
print(dict_way(a = 1))

результат:

['a', 'b']
a
a
person leaf_yakitori    schedule 11.05.2021
comment
Разве v == a не должно быть v is a? - person DurandA; 11.05.2021