Função de mesclagem e emenda de várias tabelas do DataFrame, explicação detalhada do parâmetro de mesclagem + exibição de operação de código
Criar um DataFrame de demonstração
data = {
'name': ['user1', 'user2', 'user3', 'user4', 'user5'],
'old': [21, 18, 22, 28, 26],
'weight': [124, 124, 102,107,121]
}
test_DataFrame1= pd.DataFrame(data)
test_DataFrame1
data = {
'name': ['user1', 'user3', 'user5', 'user6', 'user7'],
'old': [21, 22, 26, 30, 31],
'high': [171, 165, 180,175,159]
}
test_DataFrame2= pd.DataFrame(data)
test_DataFrame2
Função de mesclagem
1.concatenar
Existem funções concat em outras linguagens, que são concatenação de strings em linguagem C e concatenação de strings em SQL. Em Pandas, é equivalente a uma conexão completa (Union all) no banco de dados: ao longo de um eixo, vários objetos são empilhados, então não os confunda. Ao contrário do banco de dados, ele não desduplica, mas o método drop_duplicates pode ser usado para obter o efeito de desduplicação.
A sintaxe é a seguinte:
concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False, copy=True):
Site oficial: pandas.concat
Explicação do parâmetro:
- objs: Uma sequência ou mapa de objetos Series, DataFrame ou Panel, ou seja, os dois objetos que estão concatenados.
- axis: O padrão é 0, 0 é emenda de linha, 1 é emenda de coluna, ou seja, ao longo do eixo da conexão.
- join: {'inner', 'outer'}, o padrão é 'outer'. Como lidar com índices em outros eixos. exterior é a união e interior é a interseção.
- ignore_index: boolean, padrão False. Se True, o valor do índice mesclado não é usado. Os eixos resultantes serão rotulados 0,...,n-1. Os valores de índice em outros eixos persistem na junção.
- join_axes: Lista de objetos Index. Use índices específicos para outros eixos n-1 em vez de executar a lógica de configuração interna/externa.
- chaves: sequência, padrão Nenhum. Crie um índice hierárquico usando a chave passada como a camada mais externa. Se multi-índice deve ser uma tupla.
- níveis: lista de sequências, padrão Nenhum. O nível específico (valor exclusivo) usado para construir o MultiIndex. Caso contrário, eles serão inferidos da chave.
- nomes: lista, padrão Nenhum. O nome do nível no índice hierárquico resultante.
- verifique_integridade: booleano, padrão Falso. Verifique se o eixo recém-conectado contém duplicatas.
- copy: boolean, o valor padrão é True. Se False, não copie dados desnecessariamente.
Ao usar concat diretamente sem parâmetros, é:
pd.concat([test_DataFrame1,test_DataFrame2])
Neste momento, o padrão do eixo é 0, o que significa conexão de linha, que é quando o eixo é 1:
pd.concat([test_DataFrame1,test_DataFrame2],axis=1)
O número de linhas não muda e as colunas aumentam. Alterar junção para interseção apenas mescla outras exclusões com a mesma coluna:
pd.concat([test_DataFrame1,test_DataFrame2],axis=0,join='inner')
Da mesma forma, quando o eixo é 1, é o mesmo, apenas para ver se o índice da linha é o mesmo
pd.concat([test_DataFrame1,test_DataFrame2],axis=1,join='inner')
A nova versão do pandas removeu join_axes, que pode ser substituído por merge.
E ignore_index é substituir o índice do índice correspondentemente:
pd.concat([test_DataFrame1,test_DataFrame2],axis=0,join='outer',ignore_index=True)
2. mesclar
Merge é mais como um banco de dados relacional SQL para conectar bancos de dados de acordo com as chaves correspondentes na tabela, semelhante ao join.
A sintaxe é a seguinte:
merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=True,
suffixes=('_x', '_y'), copy=True, indicator=False)
Site oficial: pandas.merge
Descrição do parâmetro:
- left: O DataFrame esquerdo participando da mesclagem
- right: o DataFrame certo participando da mesclagem
- como: {inner, outer, left, right} o padrão é interno como interseção.
- on: nomes de coluna a serem usados para junções. O nome da coluna é como um recurso comum às duas tabelas que estão sendo unidas. Semelhante a mesclar várias tabelas por chave. Se não for especificado e outras chaves de conexão não precisarem ser especificadas, a interseção dos nomes das colunas esquerda e direita será usada como chave de conexão, ou seja, a conexão interna.
- left_on: a coluna no DataFrame esquerdo para usar como chave de junção
- right_on: a coluna direita no DataFrame usada como chave de junção
- left_index: Use o índice de linha no DataFrame esquerdo como a chave de junção
- right_index: use o índice de linha no DataFrame certo como a chave de junção
- sort: O padrão é True, que classifica os dados mesclados. Definir como False pode melhorar o desempenho na maioria dos casos
- suffixes: Uma tupla de valores de string, usada para especificar o nome do sufixo anexado ao nome da coluna quando os DataFrames esquerdo e direito têm o mesmo nome de coluna, o padrão é ('_x','_y'). Se ambos os objetos DataFrame tiverem "Data", então "Data_x" e "Data_y" aparecerão no resultado
- copy: O padrão é True, sempre copia os dados na estrutura de dados; configurar como False na maioria dos casos pode melhorar o desempenho
- indicador: mostra a fonte dos dados nos dados combinados
Ainda nos dois DataFrames anteriores, o efeito padrão é:
pd.merge(test_DataFrame1,test_DataFrame2)
Se a interseção for mesclada de acordo com o índice, se não houver valor de índice, ela será preenchida automaticamente com NaN:
pd.merge(test_DataFrame1,test_DataFrame2,how='outer')
Se você deseja especificar um nome de coluna específico para indexação, você precisa da função on:
pd.merge(test_DataFrame1,test_DataFrame2,how='outer',on='name')
Se ambos os objetos DataFrame tiverem "old", então "old_x" e "old_y" aparecerão no resultado
Se os nomes das colunas nas duas tabelas forem diferentes, como criar um DataFrame3:
Você pode usar left_on e right_on quando quiser mesclar com DataFrame1:
pd.merge(test_DataFrame1,test_DataFrame3,how='outer',left_on=['name'],right_on=['user'])
A linha não mostra o mesmo efeito, sort sort:
pd.merge(test_DataFrame1,test_DataFrame2,how='outer',sort=True)