如何连接两个数据帧并留下空白项目?



在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"的行数多于数据帧"总计"的行数

我想合并两个数据帧,以便保留所有"candidatos_2018"行,即使它们的键在"总计"中不存在 - 在这些情况下,"total_bens"列可能在相应的行上显示为空白

拜托,有谁知道我该怎么做?

我希望结果是一个包含 8,583 行的数据帧,所有列为"candidatos_2018",加上"总计"列

如果我进行简单的合并:

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

结果是数据帧较小,仅在两个数据帧中找到"sequencia"键

我想保留所有行"candidatos_2018",当"总计"中不存在键时,将此行留空 "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}}

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

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

最新更新