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.

MKoosej
fonte

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 ...

Joran Beasley
fonte
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)
ostrokach
fonte
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)
Pelumi
fonte
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.

martin-martin
fonte
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)
Mohsin Mahmood
fonte
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)
Harish Kumawat
fonte