首页 > 解决方案 > 在熊猫中,如何从另一个更小且具有相同特征的数据框更新数据框?

问题描述

在 python 3 和 pandas 中,我有两个具有相同列的数据框

df_one.info()
<class 'pandas.core.frame.DataFrame'>
uf                      8576 non-null object
cargo                   8576 non-null object
sequencial              8576 non-null int64
numero_urna             8576 non-null object
nome_completo           8576 non-null object
nome_urna               8576 non-null object
cpf                     8576 non-null object
e_mail                  8576 non-null object
situacao_candidatura    8576 non-null object


df_two.info()
uf                      102 non-null object
cargo                   102 non-null object
sequencial              102 non-null int64
numero_urna             102 non-null object
nome_completo           102 non-null object
nome_urna               102 non-null object
cpf                     102 non-null object
e_mail                  102 non-null object
situacao_candidatura    102 non-null object

数据框 df_one 包含有关人员的历史信息。有些人的信息会随着时间而变化。“cpf”列是一个识别码

数据框 df_two 较小。它是一个仅包含人员信息更改的文件。还有“cpf”列

我需要用收到的“df_two”更新“df_one”信息

也就是说,两个数据帧中具有相同“cpf”的所有行都需要更新——“df_one”需要具有“df_two”的内容。但其他行必须保持不变

请问,有谁知道我该怎么做?

df_one 的第一行示例:

{'uf': {0: 'AC', 1: 'AC', 2: 'AC', 3: 'AC', 4: 'AC'},
 'cargo': {0: 'DEPUTADO FEDERAL',
  1: 'DEPUTADO FEDERAL',
  2: 'DEPUTADO FEDERAL',
  3: 'DEPUTADO FEDERAL',
  4: 'DEPUTADO FEDERAL'},
 'sequencial': {0: 10000600207,
  1: 10000602510,
  2: 10000602299,
  3: 10000608399,
  4: 10000600222},
 'numero_urna': {0: '1712', 1: '2222', 2: '1277', 3: '1331', 4: '1700'},
 'nome_completo': {0: 'DANIELA PAIVA DE OLIVEIRA',
  1: 'ANTÔNIA LUCILÉIA CRUZ RAMOS CÂMARA',
  2: 'CLEIDE MARIA FERREIRA DE ARAUJO',
  3: 'LEONARDO CUNHA DE BRITO',
  4: 'MICHELA BATISTA LACERDA'},
 'nome_urna': {0: 'DANIELA PAIVA',
  1: 'ANTÔNIA LÚCIA',
  2: 'CLEIDE ARAÚJO DA SAÚDE',
  3: 'LEO DE BRITO',
  4: 'MICHELA LACERDA'},
 'cpf': {0: '52614174220',
  1: '50791524272',
  2: '30864372272',
  3: '63182246291',
  4: '51378353234'},
 'e_mail': {0: 'PSL17.AC@GMAIL.COM',
  1: 'ANTONIALUCIACAMARAPR22@GMAIL.COM',
  2: 'PDTACRE12@GMAIL.COM',
  3: 'LEODEBRITOACRE@GMAIL.COM',
  4: 'PSL17.AC@GMAIL.COM'},
 'situacao_candidatura': {0: 'AGUARDANDO JULGAMENTO',
  1: 'AGUARDANDO JULGAMENTO',
  2: 'AGUARDANDO JULGAMENTO',
  3: 'AGUARDANDO JULGAMENTO',
  4: 'AGUARDANDO JULGAMENTO'}}

df_two 的第一行示例:

{'uf': {0: 'AC', 1: 'AC', 2: 'AC', 3: 'AC', 4: 'AC'},
 'cargo': {0: 'DEPUTADO FEDERAL',
  1: 'DEPUTADO FEDERAL',
  2: 'DEPUTADO FEDERAL',
  3: 'DEPUTADO FEDERAL',
  4: 'DEPUTADO FEDERAL'},
 'sequencial': {0: 10000600207,
  1: 10000602510,
  2: 10000602299,
  3: 10000608399,
  4: 10000600222},
 'numero_urna': {0: '1712', 1: '2222', 2: '1277', 3: '1331', 4: '1700'},
 'nome_completo': {0: 'DANIELA PAIVA DE OLIVEIRA',
  1: 'ANTÔNIA LUCILÉIA CRUZ RAMOS CÂMARA',
  2: 'CLEIDE MARIA FERREIRA DE ARAUJO',
  3: 'LEONARDO CUNHA DE BRITO',
  4: 'MICHELA BATISTA LACERDA'},
 'nome_urna': {0: 'DANIELA PAIVA',
  1: 'ANTÔNIA LÚCIA',
  2: 'CLEIDE ARAÚJO DA SAÚDE',
  3: 'LEO DE BRITO',
  4: 'MICHELA LACERDA'},
 'cpf': {0: '52614174220',
  1: '50791524272',
  2: '30864372272',
  3: '63182246291',
  4: '51378353234'},
 'e_mail': {0: 'PSL17.AC@GMAIL.COM',
  1: 'ANTONIALUCIACAMARAPR22@GMAIL.COM',
  2: 'PDTACRE12@GMAIL.COM',
  3: 'LEODEBRITOACRE@GMAIL.COM',
  4: 'PSL17.AC@hotmail.COM'},
 'situacao_candidatura': {0: 'AGUARDANDO JULGAMENTO',
  1: 'AGUARDANDO JULGAMENTO',
  2: 'RENUNCIA',
  3: 'AGUARDANDO JULGAMENTO',
  4: 'CANCELADO'}}

-/-

我按照以下步骤操作:

1 - 我加载了 8,576 行的历史数据帧 df_one

2 - 我加载了昨天 27 日发送的更新数据帧,包含 25 行更新,df_two

3 - df_one.update (df_two)

4 - 我将 df_one 保存为文件 - df_currentversion.csv - 我检查了 25 个新行

5 - 我上传了 8,576 行的更新 df_currentversion 数据帧

6 - 我加载了更新发送的新数据帧,今天 28,86 行更新,df_two

7 - df_currentversion.update (df_two)

8 - 86 行已更新,但之前已更新的 25 行已恢复到第 1 步中的方式

标签: pythonpandasdataframe

解决方案


推荐阅读