#python-3.x #local-variables
Вопрос:
Я хочу объединить 2 кадра данных с помощью функции. Функция создает фрейм данных df1 при вызове с переменной «x=1», а затем другой, df2, при вызове с «x != 1», на основе оператора if в приведенном ниже фрагменте кода функции для большей ясности.
При достижении строки «df3 = pd.concat» я получаю сообщение об ошибке «UnboundLocalError: локальная переменная ‘df1’, на которую ссылались перед назначением«.
Я хотел бы понять, как добиться результата объединения df1 и df2 в df3.
def Concat(url, x):
if x == 1:
df1 = pd.read_json(url)
else:
df2 = pd.read_json(url)
df3 = pd.concat([df1, df2], ignore_index=True)
def main():
Concat('*url*', 1)
Concat('*url*', 2)
Комментарии:
1. В
else
блоке вы никогда не определяетеdf1
, поэтому вы получаетеUnboundLocalError
.2.
both df1 and df2 are generated
вот тут ты ошибаешься. У вас есть код для создания обоих, но он никогда не будет работать вместе.
Ответ №1:
Вам следует немного подправить его, чтобы быть:
def Concat(url, x):
for i in x:
if i == 1:
df1 = pd.read_json(url)
else:
df2 = pd.read_json(url)
df3 = pd.concat([df1, df2], ignore_index=True)
def main():
Concat('*url*', [1, 2])
Комментарии:
1. Комментарии и ответ имеют смысл — я понимаю, почему я получаю ошибку. Просто чтобы убедиться, что я понимаю ответ, выполняется ли Конкат дважды из main (), один раз с x=1 и один раз с x=2?
2. @FlybatRamirez Нет, теперь это не так, он запускается один раз
3. Ах, я вижу, вы передаете список — мне и в голову не пришло это сделать. Довольно элегантно.
4. Я протестировал ваш код, однако я все еще получаю ту же ошибку = «UnboundLocalError: локальная переменная ‘df1’, на которую ссылались перед назначением». Оказывается, df1 вообще никогда не создается, поэтому x ==1 по какой-то причине никогда не бывает истинным.
5. @FlybatRamirez Ну, это, вероятно, проблема с вашим другим кодом, который вы нам не показали, а не с моим кодом…