Fusión de datos de DataFrame en Pandas Contract | Fusionar

En mi trabajo recientemente, encontré problemas de conexión y fusión de datos, por lo que está organizado de la siguiente manera para la referencia de aquellos que lo necesitan ~

Referencia de: Elephant in Dance: https://blog.csdn.net/gdkyxy2013/article/details/80785361


concat

concat: apila varios objetos a lo largo de un eje

El método concat es equivalente a la conexión completa (union all) en la base de datos, no solo puede especificar el método de conexión (unión externa o unión interna), sino también especificar la conexión según un eje determinado. A diferencia de la base de datos, no se desduplica, pero puede utilizar el método drop_duplicates para lograr el efecto de desduplicación.

concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, 
       keys=None, levels=None, names=None, verify_integrity=False, copy=True): 

pd.concat () simplemente empalma dos tablas juntas. El parámetro eje es la clave. Se usa para especificar si es una fila o una columna. El eje por defecto es 0. Cuando axis = 0, el efecto de pd.concat ([obj1, obj2]) es el mismo que obj1.append (obj2); cuando axis = 1, el efecto de pd.concat ([obj1, obj2], axis = 1 ) El efecto es el mismo que pd.merge (obj1, obj2, left_index = True, right_index = True, how = 'external').

Introducción de parámetros:

  • objs: la colección de objetos que necesitan estar conectados, generalmente una lista o diccionario;

  • eje: eje de conexión;

  • unirse: el parámetro es 'exterior' o 'interior';

  • join_axes = []: especifica un índice personalizado;

  • keys = []: crea un índice jerárquico;

  • ignore_index = True: Reconstruir índice

Caso:

student.csv

   id   name  age    sex
0   1    tom   23    man
1   2   john   33    man
2   3  alice   22  woman
3   4   jack   42    man
4   5   saex   22  woman
5   6   jmas   21    man
6   7  jjban   34    man
7   8  alicn   22  woman

score.csv

   id   name  score
0   1    tom     89
1   2   john     90
2   3  alice     78
3   4   jack     99
4   5   saex     87

Use el contrato para conectarse, preste atención a la redacción del contrato ([df1, df2]), únase opcional externo / interno

contract_pd = pd.concat([student_pd,score_pd],join='outer', ignore_index=True)

   id   name   age    sex  score
0   1    tom  23.0    man    NaN
1   2   john  33.0    man    NaN
2   3  alice  22.0  woman    NaN
3   4   jack  42.0    man    NaN
4   5   saex  22.0  woman    NaN
5   6   jmas  21.0    man    NaN
6   7  jjban  34.0    man    NaN
7   8  alicn  22.0  woman    NaN
0   1    tom   NaN    NaN   89.0
1   2   john   NaN    NaN   90.0
2   3  alice   NaN    NaN   78.0
3   4   jack   NaN    NaN   99.0
4   5   saex   NaN    NaN   87.0
5   6   jmas   NaN    NaN   33.0

contract_pd = pd.concat([student_pd,score_pd],join='inner', ignore_index=True)
    id   name
0    1    tom
1    2   john
2    3  alice
3    4   jack
4    5   saex
5    6   jmas
6    7  jjban
7    8  alicn
8    1    tom
9    2   john
10   3  alice
11   4   jack
12   5   saex
13   6   jmas


fusionar para unir columnas por clave

Similar al modo de conexión de base de datos relacional puede ser diferente según DatFrame conecte uno o más enlaces. El escenario de aplicación típico de esta función es integrar dos tablas con diferentes campos para la misma clave primaria e integrarlas en una tabla de acuerdo con la clave primaria.

merge(left, right, how='inner', on=None, left_on=None, right_on=None,  
      left_index=False, right_index=False, sort=True,  
      suffixes=('_x', '_y'), copy=True, indicator=False)

Introducción de parámetros:

  • izquierda y derecha: dos DataFrames diferentes;

  • cómo: modo de conexión, hay interno, izquierdo, derecho, externo, el predeterminado es interno;

  • on: Se refiere al nombre de índice de columna utilizado para la conexión, que debe existir en los DataFrames izquierdo y derecho. Si no se especifica y no se especifican otros parámetros, la intersección de los dos nombres de columna de DataFrame se utiliza como clave de conexión;

  • left_on: El nombre de la columna usado para la clave de conexión en el DataFrame izquierdo Este parámetro es muy útil cuando los nombres de las columnas izquierda y derecha son diferentes pero el significado es el mismo;

  • right_on: el nombre de la columna utilizado para conectar la clave en el DataFrame derecho;

  • left_index: Utilice el índice de fila en el DataFrame izquierdo como clave de conexión;

  • right_index: Utilice el índice de fila en el DataFrame derecho como clave de conexión;

  • ordenar: el valor predeterminado es Verdadero, ordenar los datos combinados, establecerlo en Falso puede mejorar el rendimiento;

  • sufijos: una tupla de valores de cadena, utilizada para especificar el nombre del sufijo agregado al nombre de la columna cuando existe el mismo nombre de columna en el DataFrame izquierdo y derecho, el valor predeterminado es ('_x', '_ y');

  • copiar: el valor predeterminado es Verdadero, siempre copie los datos en la estructura de datos, si lo establece en Falso puede mejorar el rendimiento;

Ejemplo:


# 1.默认以重叠的列名当做连接键
contract_pd = pd.merge(student_pd,score_pd,how="inner",sort=True)
   id name_x  age    sex name_y  score
0   1    tom   23    man    tom     89
1   2   john   33    man   john     90
2   3  alice   22  woman  alice     78
3   4   jack   42    man   jack     99
4   5   saex   22  woman   saex     87
5   6   jmas   21    man   jmas     33


# 2.默认做inner连接(取key的交集),连接方式还有(left,right,outer),制定连接方式加参数:how=''
contract_pd = pd.merge(student_pd,score_pd,how="left",on='id',sort=True)
   id name_x  age    sex name_y  score
0   1    tom   23    man    tom   89.0
1   2   john   33    man   john   90.0
2   3  alice   22  woman  alice   78.0
3   4   jack   42    man   jack   99.0
4   5   saex   22  woman   saex   87.0
5   6   jmas   21    man   jmas   33.0
6   7  jjban   34    man    NaN    NaN
7   8  alicn   22  woman    NaN    NaN

# 3. 执行on 的时候不能够指定left_on 或者right_on
contract_pd = pd.merge(student_pd, score_pd, how="left", left_on='id', right_on='id', sort=True)
   id name_x  age    sex name_y  score
0   1    tom   23    man    tom   89.0
1   2   john   33    man   john   90.0
2   3  alice   22  woman  alice   78.0
3   4   jack   42    man   jack   99.0
4   5   saex   22  woman   saex   87.0
5   6   jmas   21    man   jmas   33.0
6   7  jjban   34    man    NaN    NaN
7   8  alicn   22  woman    NaN    NaN

Saque el resultado de la fusión según las condiciones:

# 取出score为NaN的记录
allsed = contract_pd.loc[contract_pd.score.isna()]
   id name_x  age    sex name_y  score
6   7  jjban   34    man    NaN    NaN
7   8  alicn   22  woman    NaN    NaN

# 取出score 为非NaN的记录
allsed = contract_pd.loc[~contract_pd.score.isna()]
   id name_x  age    sex name_y  score
0   1    tom   23    man    tom   89.0
1   2   john   33    man   john   90.0
2   3  alice   22  woman  alice   78.0
3   4   jack   42    man   jack   99.0
4   5   saex   22  woman   saex   87.0
5   6   jmas   21    man   jmas   33.0

# 对结果进行去重
allsed.drop_duplicates()

Función de la función lambda:

tag_pd = pd.read_csv("tags.csv")
   id                           tags
0   1  1234|2345|3456|2348|7865|1357
1   2  1234|2345|3456|2348|7865|1357
2   3  1234|2345|3456|2348|7865|1357
3   4  1234|2345|3456|2348|7865|1357
4   5  1234|2345|3456|2348|7865|1357
5   6  1234|2345|3456|2348|7865|1357


tag_pd['idss'] = tag_pd.tags.apply(lambda x:x.split('|'))
   id                           tags                                  idss
0   1  1234|2345|3456|2348|7865|1357  [1234, 2345, 3456, 2348, 7865, 1357]
1   2  1234|2345|3456|2348|7865|1357  [1234, 2345, 3456, 2348, 7865, 1357]
2   3  1234|2345|3456|2348|7865|1357  [1234, 2345, 3456, 2348, 7865, 1357]
3   4  1234|2345|3456|2348|7865|1357  [1234, 2345, 3456, 2348, 7865, 1357]
4   5  1234|2345|3456|2348|7865|1357  [1234, 2345, 3456, 2348, 7865, 1357]

para resumir:

  1. el contrato es similar a la unión todas las operaciones en bases de datos relacionales
  2. la combinación es similar a las operaciones de combinación interna, combinación izquierda y combinación derecha en bases de datos relacionales

Supongo que te gusta

Origin blog.csdn.net/qq_43081842/article/details/110354985
Recomendado
Clasificación