Oi, eu tenho os seguintes quadros de dados:
> df1
id begin conditional confidence discoveryTechnique
0 278 56 false 0.0 1
1 421 18 false 0.0 1
> df2
concept
0 A
1 B
Como mesclar os índices para obter:
id begin conditional confidence discoveryTechnique concept
0 278 56 false 0.0 1 A
1 421 18 false 0.0 1 B
Eu pergunto porque é do meu entendimento que, merge()
ou seja, df1.merge(df2)
usa colunas para fazer a correspondência. De fato, fazendo isso, recebo:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/pandas/core/frame.py", line 4618, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 58, in merge
copy=copy, indicator=indicator)
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 491, in __init__
self._validate_specification()
File "/usr/local/lib/python2.7/dist-packages/pandas/tools/merge.py", line 812, in _validate_specification
raise MergeError('No common columns to perform merge on')
pandas.tools.merge.MergeError: No common columns to perform merge on
É uma má prática mesclar no índice? Isso é impossível? Nesse caso, como posso mudar o índice para uma nova coluna chamada "index"?
obrigado
df1.join(df2)
Respostas:
Use
merge
, que é junção interna por padrão:Ou
join
, que é deixado unido por padrão:Ou
concat
, que é junção externa por padrão:Amostras :
fonte
.transpose()
um de seus dfs para sincronizar os índices - que foi meu problemaconcat
tem que colocar df entre parênteses enquantojoin
emerge
não?dfs = [df1, df2, df3,... dfn]
e, em seguidadf = pd. concat(dfs)
você pode usar concat ([df1, df2, ...], axis = 1) para concatenar dois ou mais DFs alinhados por índices:
ou mesclar para concatenar por campos / índices personalizados:
ou junte - se para participar por índice:
fonte
Por padrão:
join
uma junção esquerda empd.merge
colunaspd.concat
é uma junção interna em colunas é uma junção externa em colunaspd.concat
:aceita argumentos iteráveis. Portanto, ele não pode receber DataFrames diretamente (use
[df,df2]
) Asdimensões do DataFrame devem corresponder ao longo do eixo
Join
epd.merge
:pode receber argumentos do DataFrame
fonte
Um bug bobo que me pegou: as junções falharam porque o índice era
dtypes
diferente. Isso não era óbvio, pois as duas tabelas eram tabelas dinâmicas da mesma tabela original. Depoisreset_index
, os índices pareciam idênticos em Jupyter. Ele só veio à tona ao salvar no Excel ...Corrigido com:
df1[['key']] = df1[['key']].apply(pd.to_numeric)
Espero que isso economize alguém por uma hora!
fonte
Se você deseja juntar dois quadros de dados no pandas, você pode simplesmente usar os atributos disponíveis, como
merge
ouconcatenate
. Por exemplo, se eu tiver dois quadros de dadosdf1
edf2
puder me juntar a eles:fonte