Python: Запуск функции для добавления значений в пустой список не возвращает значений - PullRequest
0 голосов
/ 01 мая 2018

Вероятно, это очень простой вопрос, но я не смог понять это.

В настоящее время я использую следующее для добавления значений в пустой список

shoes = {'groups':['running','walking']}
df_shoes_group_names = pd.DataFrame(shoes)

shoes_group_name=[]

for type in df_shoes_group_names['groups']:
    shoes_group_name.append(type)

shoes_group_name
['running', 'walking']

Я пытаюсь сделать то же самое, используя цикл for, однако, когда я выполняю цикл, список возвращается как пустой

shoes_group_name=[]

def list_builder(dataframe_name):
    if 'shoes' in dataframe_name:
        for type in df_shoes_group_names['groups']:
            shoes_group_name.append(type)

list_builder(df_shoes_group_names)

shoes_group_name
[]

Причиной использования функции является то, что в конечном итоге у меня будет несколько DF с разными продуктами, поэтому я хотел бы просто иметь операторы if внутри функции для обработки создания каждого списка

так, например, будущие примеры могут выглядеть так:

df_shoes_group_names
df_boots_group_names
df_sandals_group_names

shoes_group_name=[]
boots_group_name=[]
sandals_group_name=[]


def list_builder(dataframe_name):
    if 'shoes' in dataframe_name:
        for type in df_shoes_group_names['groups']:
            shoes_group_name.append(type)
    elif 'boots' in dataframe_name:
        for type in df_boots_group_names['groups']:
            boots_group_name.append(type)
    elif 'sandals' in dataframe_name:
        for type in df_sandals_group_names['groups']:
            sandals_group_name.append(type)    

list_builder(df_shoes_group_names)
list_builder(df_boots_group_names)
list_builder(df_sandals_group_names)

Не уверен, правильно ли я подхожу к этому, поэтому любой совет будет признателен.

Best

1 Ответ

0 голосов
/ 01 мая 2018

Вы должны никогда вызывать или искать имя переменной, как если бы это была строка.

Вместо этого используйте словарь для хранения переменного числа переменных.

Плохая практика

# dataframes
df_shoes_group_names = pd.DataFrame(...)
df_boots_group_names = pd.DataFrame(...)
df_sandals_group_names = pd.DataFrame(...)

def foo(x):
    if shoes in df_shoes_group_names:  # <-- THIS WILL NOT WORK
        # do something with x

Хорошая практика

# dataframes
df_shoes_group_names = pd.DataFrame(...)
df_boots_group_names = pd.DataFrame(...)
df_sandals_group_names = pd.DataFrame(...)

dfs = {'shoes': df_shoes_group_names,
       'boots': df_boots_group_names,
       'sandals': df_sandals_group_names}

def foo(key):
    if 'shoes' in key:  # <-- THIS WILL WORK
        # do something with dfs[key]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...