Estou tentando mesclar três dataframes usando intersection(). Como podemos verificar se todos os dataframes existem/foram inicializados antes de executar intersection() sem vários blocos de verificação if-else? Se algum dataframe não estiver atribuído, não o assuma durante a execução de intersection(). Às vezes, recebo o erro - UnboundLocalError: variável local 'df_2' referenciada antes da atribuição , porque o arquivo2 não existe.
OU existe alguma outra maneira fácil de conseguir isso?
Abaixo está minha abordagem:
if os.path.exists(file1):
df_1 = pd.read_csv(file1, header=None, names=header_1, sep=',', index_col=None)
if os.path.exists(file2):
df_2 = pd.read_csv(file2, header=None, names=header_2, sep=',', index_col=None)
if os.path.exists(file3):
df_3 = pd.read_csv(file3, header=None, names=header_3, sep=',', index_col=None)
common_columns = df_1.columns.intersection(df_2.columns).intersection(df_3.columns)
filtered_1 = df_1[common_columns]
filtered_2 = df_2[common_columns]
filtered_3 = df_3[common_columns]
concatenated_df = pd.concat([filtered_1, filtered_2, filtered_3], ignore_index=True)
Seu código já está muito bom. Você tem muitos elementos repetidos na sua versão atual. Para torná-lo mais limpo, você pode usar compreensão de lista como
[function(x) for x in a_list]
Ao lidar com arquivos que nem sempre estão disponíveis, você pode usar esta abordagem para mesclar DataFrames existentes com segurança, sem erros de inicialização. A solução carrega dinamicamente os dados disponíveis, identifica colunas comuns em todos os conjuntos de dados carregados com sucesso e os mescla automaticamente:
Esta implementação verifica a existência do arquivo antes do carregamento, ignora completamente quaisquer fontes ausentes e garante que apenas as colunas presentes em todos os conjuntos de dados disponíveis sejam mescladas. A
reduce
operação encontra com eficiência colunas comuns entre todos os DataFrames carregados, enquanto a abordagem baseada em lista evita erros de referência a variáveis não inicializadas. Se nenhum dos arquivos existir, ele retorna um DataFrame vazio em vez de gerar erros. Você pode modificar afile_config
lista para adicionar ou remover fontes de dados sem alterar a lógica principal.