如何连接两个数据框并保留空白项?

时间:2018-08-23 17:04:06

标签: python pandas merge

在python3和pandas中,我有这两个数据框

candidatos_2018.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 8583 entries, 5 to 404
Data columns (total 11 columns):
uf                 8583 non-null object
cargo              8583 non-null object
sequencial         8583 non-null object
numero_urna        8583 non-null object
nome_completo      8583 non-null object
nome_urna          8583 non-null object
cpf                8583 non-null object
e_mail             8583 non-null object
partido_eleicao    8583 non-null object
data_nascimento    8583 non-null object
ocupacao           8583 non-null object
dtypes: object(11)
memory usage: 804.7+ KB

total.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 5534 entries, 3277 to 5111
Data columns (total 2 columns):
sequencial    5534 non-null object
total_bens    5534 non-null float64
dtypes: float64(1), object(1)
memory usage: 129.7+ KB

数据框具有一个公共键,即“顺序”列。但是数据框“ candidatos_2018”比数据框“ total”具有更多的行

我想合并两个数据框,以便保留所有“ candidatos_2018”行,即使它们的键不存在于“ total”中也是如此-在这种情况下,“ total_bens”列可能在相应行上显示为空白

请,有人知道我该怎么做吗?

我希望结果为8583行的数据框,其中所有列均为“ candidatos_2018”,再加上“总计”列

如果我进行简单合并:

teste =  pd.merge(candidatos_2018, total, left_on='sequencial', right_on='sequencial')

结果是较小的数据帧,仅在两个数据帧中都有“ sequencia”键

我要保留所有“ candidatos_2018”行,并且当“ total”中的键不存在时,在“ total_bens”列中将此行留空

-/-

示例数据帧内容

candidatos_2018.head(2).to_dict()
{'uf': {5: 'AC', 6: 'AC'},
 'cargo': {5: 'DEPUTADO FEDERAL', 6: 'DEPUTADO FEDERAL'},
 'sequencial': {5: '10000600207', 6: '10000602510'},
 'numero_urna': {5: '1712', 6: '2222'},
 'nome_completo': {5: 'DANIELA PAIVA DE OLIVEIRA',
  6: 'ANTÔNIA LUCILÉIA CRUZ RAMOS CÂMARA'},
 'nome_urna': {5: 'DANIELA PAIVA', 6: 'ANTÔNIA LÚCIA'},
 'cpf': {5: '52614174220', 6: '50791524272'},
 'e_mail': {5: 'PSL17.AC@GMAIL.COM', 6: 'ANTONIALUCIACAMARAPR22@GMAIL.COM'},
 'partido_eleicao': {5: 'PSL', 6: 'PR'},
 'data_nascimento': {5: '23/12/1982', 6: '17/07/1970'},
 'ocupacao': {5: 'OUTROS', 6: 'EMPRESÁRIO'}}

total.head(2).to_dict()
{'sequencial': {3277: '250000600423', 3279: '250000600426'},
 'total_bens': {3277: 1202006700.0, 3279: 1018384000.0}}

假设在示例中,从数据帧“ candidatos_2018”开始,密钥“ 10000600207”在两个数据帧中都存在,而密钥“ 10000602510”仅存在于数据帧“ candidatos_2018”中。联合的结果将是

{'uf': {5: 'AC', 6: 'AC'},
 'cargo': {5: 'DEPUTADO FEDERAL', 6: 'DEPUTADO FEDERAL'},
 'sequencial': {5: '10000600207', 6: '10000602510'},
 'numero_urna': {5: '1712', 6: '2222'},
 'nome_completo': {5: 'DANIELA PAIVA DE OLIVEIRA',
  6: 'ANTÔNIA LUCILÉIA CRUZ RAMOS CÂMARA'},
 'nome_urna': {5: 'DANIELA PAIVA', 6: 'ANTÔNIA LÚCIA'},
 'cpf': {5: '52614174220', 6: '50791524272'},
 'e_mail': {5: 'PSL17.AC@GMAIL.COM', 6: 'ANTONIALUCIACAMARAPR22@GMAIL.COM'},
 'partido_eleicao': {5: 'PSL', 6: 'PR'},
 'data_nascimento': {5: '23/12/1982', 6: '17/07/1970'},
 'ocupacao': {5: 'OUTROS', 6: 'EMPRESÁRIO'},
 'total_bens': {5: 1202006700.0, 6: null}}

1 个答案:

答案 0 :(得分:2)

只需添加how='left',如下所示:

pd.merge(candidatos_2018, total, how='left', left_on='sequencial', right_on='sequencial')