Недавно столкнулась на работе с задачей, когда нужно было объединить два датафрейма — df1 и df2. Но тут был нюанс: иногда df1 просто не загружался из-за отсутствия данных. А мне нужно было учесть его, если данные вдруг появятся. Если бы пыталась объединить df1 и df2, когда df1 не существует, то это выдавало бы ошибку. Код и выдавал ошибку, чего уж там. 🤦♂️
Вот тут и пригодилась небольшая хитрость с проверкой на существование переменной.
В Python можно использовать функцию locals(), чтобы проверить, была ли создана переменная, прежде чем что-то с ней делать. Например, если я хочу проверить, существует ли df1, то пишу условие:
if 'df1' not in locals():
df1 = pd.DataFrame() # Создаем df1, если он не существует
Итак, накидаем примерчики.
🔹 Вариант 1: locals()
import pandas as pd
df2 = pd.DataFrame({
'status': [1, 2, 3],
'manager_name': ['Иванов', 'Петров', 'Сидоров'] })
# Проверка наличия df1
if 'df1' not in locals() or df1.empty:
df1 = df2.copy() # Если df1 пустой или не существует, присваиваем ему df2
else:
df1 = pd.concat([df1, df2], ignore_index=True) # Объединение строк
🔹 Вариант 2: try-except
Другой способ — использовать try-except, чтобы поймать ошибку NameError, если переменная df1 еще не была создана. Это помогает избежать лишних проверок на пустоту и существование:
try:
if df1.empty:
# Если df1 пустой, присваиваем ему значения df2
df1 = df2.copy()
else:
# Если df1 не пустой, объединяем его с df2
df1 = pd.concat([df1, df2], ignore_index=True)
except NameError:
# Если df1 не был создан, создаем его как копию df2
df1 = df2.copy()
df1
📝 Мне больше с locals() нравится. Кратко и по сути, и не надо дублировать код.