Python назначение фрейма данных - PullRequest
3 голосов
/ 18 июня 2020

У меня довольно сложный вопрос, я постараюсь изо всех сил. У меня есть функция a (), которая вызывает функцию b () и передает b () фрейм данных (называемый «df_a»). Я узнал, что это делается по ссылке, а это означает, что когда / если внутри функции b () я добавляю новый столбец во входной фрейм данных, это также изменяет исходный. Например:

def b(df_b):
   df_b['Country'] = "not sure"

def a():
   df_a = pd.DataFrame({"Name":['Mark','Annie'],  'Age':[30,28]})
   b(df_a)
   print(df_a) # this dataframe will now have the column "Country"

Пока все хорошо. Проблема в том, что сегодня я понял, что если внутри b () мы объединяем фрейм данных с другим фреймом данных, это создаст новый локальный фрейм данных.

def b(df_b):
       df_c = pd.DataFrame({"Name":['Mark','Annie'],  'Country':['Brazil','Japan']})
       df_b = pd.merge(df_b, df_c, left_on = 'Name', right_on='Name', how='left')
def a():
       df_a = pd.DataFrame({"Name":['Mark','Annie'],  'Age':[30,28]})
       b(df_a)
       print(df_a) # this dataframe will *not* have the column "Country"

Итак, мой вопрос, как мне убедиться в этом например, столбец «Страна» также назначается исходному фрейму данных df_a без возврата его обратно? (Я бы предпочел не использовать «return df_b» внутри функции b (), поскольку мне пришлось бы изменить logi c во многих частях кода. Спасибо,

1 Ответ

1 голос
/ 18 июня 2020

Я изменил функции b() и a(), поэтому изменения, сделанные в b, возвращаются обратно в a

def b(df_b):
    df_c = pd.DataFrame({"Name":['Mark','Annie'],  'Country':['Brazil','Japan']})
    df_b = pd.merge(df_b, df_c, left_on = 'Name', right_on='Name', how='left')
    return df_b
def a():
    df_a = pd.DataFrame({"Name":['Mark','Annie'],  'Age':[30,28]})
    df_a = b(df_a)
    print(df_a) 

**Output:** a()

    Name  Age Country
0   Mark   30  Brazil
1  Annie   28   Japan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...