Можем ли мы использовать предопределенное имя переменной при создании Python фрейма данных? - PullRequest
0 голосов
/ 06 августа 2020

Я работаю над задачей преобразования существующего КОДА SAS в Python.

Я столкнулся с некоторыми проблемами при преобразовании существующего МАКРОСА SAS в его Python эквивалент.

Я при работе с предположением, что эквивалент SAS MACRO будет PYTHON FUNCTION, а эквивалент SAS MACRO VARIABLE будет PYTHON STRING Переменная, которая может использоваться в Python Code, в то время как ее значение передается в Python Function (при необходимости).

Переменная SAS MACRO имеет 2 варианта использования:

USECASE 1: Его можно использовать в теле программы SAS, например, Условие фильтра:

например,

%let COUNTRY = 'UK';
 
DATA REVENUE_UK;

set REVENUE_ALL;

where CTRY = &COUNTRY.;

run;

USECASE 2: Его можно использовать в DATA STEP в программе SAS при создании набора данных:

%let COUNTRY = 'UK';

DATA PROFIT_&COUNTRY.;

set PROFIT;

run;

Если у нас есть для записи аналогичного logi c в Python:

USECASE 1: Использование переменной в Python CODE, например, Условие фильтра:

COUNTRY = 'UK'

REVENUE_UK = REVENUE_ALL.loc[REVENUE_ALL['CTRY'] == COUNTRY,:]

USECASE 2: использовать переменную при создании Dataframe:

COUNTRY = 'UK'

'PROFIT_'+CTRY = PROFIT.copy()

Теперь второй вариант использования не работает g.

Насколько я понимаю, мы не можем использовать переменную STRING в имени Dataframe.

Другие варианты включают в себя первоначальное создание словаря и предварительное определение все переменные как KEY и связанные фреймы данных как значение, а затем использовать этот словарь для назначения имени фрейма данных.

Но это неудобно для пользователя и требует частого обновления в словаре на начальном этапе.

Есть ли лучший способ создать Python фреймы данных и назвать их в соответствии со строкой, переданной в Function?

1 Ответ

0 голосов
/ 06 августа 2020

Определение переменных таким образом в Python не рекомендуется - это просто не способ делать что-то в Pythoni c.

При этом вы можете использовать globals() для достижения вы ищете, как в следующем примере:

# my_var_3 is not defined at this point: 
print(my_var_3)
---------------------------------------------------------------------------
NameError                               
...
NameError: name 'my_var_3' is not defined

# Now use 'globals'
var_name = "my_var" + "_3"
globals()[var_name] = "Sample value"

print(my_var_3)
==> Sample value
...