Como faço para combinar dois quadros de dados?


105

Estou usando frames de dados do Pandas. Tenho um quadro de dados inicial, digamos D. Extraio dois frames de dados assim:

A = D[D.label == k]
B = D[D.label != k]

então eu mudo o rótulo em AeB

A.label = 1
B.label = -1

Quero combinar A e B para que possa tê-los como um quadro de dados, algo como uma operação de união. A ordem dos dados não é importante. No entanto, quando amostramos A e B de D, eles retêm seus índices de D.

Respostas:


148

Eu acredito que você pode usar o appendmétodo

bigdata = data1.append(data2, ignore_index=True)

para manter seus índices apenas não use a ignore_indexpalavra - chave ...


1
Isso funciona. No entanto, ele cria um novo DataFrame. Existe uma maneira de fazer isso inline? Isso seria bom para quando estou carregando grandes quantidades de dados de um banco de dados em lotes, para que possa atualizar iterativamente o DataFrame sem criar uma cópia a cada vez.
André

1
Sim, é possível, consulte: stackoverflow.com/a/46661368/5717580
martin-martin

91

Você também pode usar pd.concat, o que é particularmente útil quando você está juntando mais de dois dataframes:

bigdata = pd.concat([data1, data2], ignore_index=True, sort=False)

Eu quero usar isso, mas estou tentando concatenar duas colunas com o mesmo nome o_O
lifelonglearner

45

Pensei em adicionar isso aqui, caso alguém ache útil. @ostrokach já mencionou como você pode mesclar os quadros de dados entre as linhas, o que é

df_row_merged = pd.concat([df_a, df_b], ignore_index=True)

Para mesclar colunas, você pode usar a seguinte sintaxe:

df_col_merged = pd.concat([df_a, df_b], axis=1)

14

Há outra solução para o caso de você trabalhar com big data e precisar concatenar vários conjuntos de dados. concatpode ter um desempenho intensivo, então, se você não quiser criar um novo df a cada vez, pode usar uma compreensão de lista :

frames = [ process_file(f) for f in dataset_files ]
result = pd.append(frames)

(conforme indicado aqui nos documentos na parte inferior da seção):

Observação : é importante notar, entretanto, que concat(e portanto append) faz uma cópia completa dos dados e que a reutilização constante dessa função pode criar um impacto significativo no desempenho. Se você precisar usar a operação em vários conjuntos de dados, use uma compreensão de lista.


2

Se você deseja atualizar / substituir os valores do primeiro dataframe df1com os valores do segundo dataframedf2 . você pode fazer isso seguindo as etapas -

Etapa 1: definir o índice do primeiro dataframe (df1)

df1.set_index('id')

Etapa 2: definir o índice do segundo dataframe (df2)

df2.set_index('id')

e, finalmente, atualize o dataframe usando o seguinte snippet -

df1.update(df2)

0

1º dataFrame

train.shape

resultado:-

(31962, 3)

2º dataFrame

test.shape

resultado:-

(17197, 2)

Combinar

new_data=train.append(test,ignore_index=True)

Verifica

new_data.shape

resultado:-

(49159, 3)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.