имена переменных форматирования строки Python из списка - PullRequest
0 голосов
/ 05 октября 2018

Привет всем. Я пытаюсь определить набор переменных и хочу отформатировать их имена.

Настройка:

features=['Gender','Age','Rank'] + other11columns #selected columns of my data

    In [1]:data['Gender'].unique()
    Out[1]: array([0, 1], dtype=int64)

    In [2]:data['Age'].unique()
    Out[2]: array([10, 20, 30, 40, 50], dtype=int64)

    In [3]:data['Rank'].unique()
    Out[3]: array([0, 1, 2, 3, 4, 5, 6], dtype=int64)

    .....

Сначала я хочу установить несколько пустых фреймов данных с каждым тегом.Я хочу что-то вроде этого:

report_Gender
Out[3]: 
  Prediction Actual
0        NaN    NaN
1        NaN    NaN

report_Age
Out[5]: 
  Prediction Actual
10        NaN    NaN
20        NaN    NaN
30        NaN    NaN
40        NaN    NaN
50        NaN    NaN

report_Rank
Out[6]: 
  Prediction Actual
0        NaN    NaN
1        NaN    NaN
2        NaN    NaN
3        NaN    NaN
4        NaN    NaN
5        NaN    NaN
6        NaN    NaN

....... 

Следующий код не работает, но указывает, что я хочу сделать

for i in range(len(features)-1):
    report_features[i]=pd.DataFrame(index=data[feature[i]].unique(),columns=['Prediction','Actual'])

Я попытался поиграть с форматированием строки с помощью операции% sно не понял, как вставить имя переменной ... любая помощь приветствуется:)

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете использовать метод setattr, если вы действительно не хотите этого делать, но я предлагаю следовать совету Рави Пателя

for i in range(len(features)-1):
    setattr(object_method_or_module_your_variable_belong,
            name_for_you_varialbe,
            pd.DataFrame(index=data[feature[i]].unique(),columns=['Prediction','Actual'])
0 голосов
/ 05 октября 2018

Динамическое создание глобальных переменных может стать проблематичным.Намного проще, если вы поместите его в меньшую область видимости ==> любого объекта, например словаря.Вы можете достичь того, что вы хотите, как это

my_dictionary = dict()
for f in features:
    my_dictionary['report_{}'.format(f)] = pd.DataFrame(index=data[f].unique(),columns=['Prediction','Actual'])

Вы можете получить доступ к df, например, my_dictionary['report_Gender'].

Другим способом было бы создать класс:

class Reports:
    pass

for f in features:
    setattr(Reports, 'report_{}'.format(f), pd.DataFrame(index=data[f].unique(),columns=['Prediction','Actual'])

Тогда получите доступ как Reports.report_Gender и т.д ...

...