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:
- el contrato es similar a la unión todas las operaciones en bases de datos relacionales
- la combinación es similar a las operaciones de combinación interna, combinación izquierda y combinación derecha en bases de datos relacionales