玖叶教程网

前端编程开发入门

pandas学习笔记20-数据合并与连接(二)

在上一集中,我们学习了基本的数据合并与连接。今天,我们将深入学习多表连接、连接条件的设置和索引对齐。

多表连接概述

多表连接是数据分析中的一项高级技能,它允许我们将多个数据表合并成一个统一的数据集,以便进行更复杂的分析。

多表连接

python代码

import pandas as pd

# 创建示例数据集

df1 = pd.DataFrame({

'Key1': ['A', 'B', 'C', 'D'],

'Value1': [1, 2, 3, 4]

})

df2 = pd.DataFrame({

'Key2': ['B', 'D', 'E', 'F'],

'Value2': [5, 6, 7, 8]

})

df3 = pd.DataFrame({

'Key3': ['C', 'D'],

'Value3': [9, 10]

})

# 多表连接

merged_df = pd.merge(df1, df2, on='Key1', how='inner')

merged_df = pd.merge(merged_df, df3, on='Key3', how='inner')

print(merged_df)

连接条件的设置

python代码

# 设置复杂的连接条件

df1 = pd.DataFrame({

'ID': [1, 2, 3],

'Name': ['Alice', 'Bob', 'Charlie']

})

df2 = pd.DataFrame({

'ID': [2, 2, 4],

'Score': [90, 85, 95]

})

# 连接条件:ID 相等且 Score 大于 90

merged_df = pd.merge(df1, df2, left_on='ID', right_on='ID', how='inner', suffixes=('_left', '_right'))

merged_df = merged_df[merged_df['Score_right'] > 90]

print(merged_df)

索引对齐

python代码

# 使用join()方法进行索引对齐

df1 = pd.DataFrame({

'Value1': [1, 2, 3],

'ID': [1, 2, 3]

}).set_index('ID')

df2 = pd.DataFrame({

'Value2': [4, 5, 6],

'ID': [1, 2, 3]

}).set_index('ID')

# 索引对齐

joined_df = df1.join(df2)

print(joined_df)

参数和选项

- `on`: 指定连接的列名。

- `left_on` 和 `right_on`: 指定左表和右表的连接列。

- `how`: 指定连接的类型,可以是'inner', 'outer', 'left', 'right'。

- `suffixes`: 当两个数据集中有相同名称的列时,用于区分它们的后缀。

实际案例演示

python代码

import pandas as pd

import numpy as np

# 员工信息表

data_employees = {

'EmployeeID': [1, 2, 3, 4],

'Name': ['Alice', 'Bob', 'Charlie', 'David'],

'DepartmentID': [101, 102, 101, 103]

}

df_employees = pd.DataFrame(data_employees)

# 部门信息表

data_departments = {

'DepartmentID': [101, 102, 103],

'DepartmentName': ['HR', 'Engineering', 'Marketing']

}

df_departments = pd.DataFrame(data_departments)

# 薪资信息表

data_salaries = {

'EmployeeID': [1, 2, 3],

'Salary': [50000, 60000, 65000]

}

df_salaries = pd.DataFrame(data_salaries)

步骤1:查看数据

首先,查看我们的数据集。

python代码

print("Employees:")

print(df_employees)

print("\nDepartments:")

print(df_departments)

print("\nSalaries:")

print(df_salaries)

步骤2:多表连接

使用内连接合并员工信息、部门信息和薪资信息。

python代码

# 多表连接

merged_df = pd.merge(df_employees, df_departments, on='DepartmentID', how='inner')

merged_df = pd.merge(merged_df, df_salaries, on='EmployeeID', how='inner')

print("\nMerged DataFrame:")

print(merged_df)

步骤3:设置连接条件

假设我们只对工程部(Engineering)的员工感兴趣,并且他们的薪资高于平均水平。

python代码

# 设置连接条件

average_salary = df_salaries['Salary'].mean()

merged_df_filtered = merged_df[(merged_df['DepartmentName'] == 'Engineering') & (merged_df['Salary'] > average_salary)]

print("\nFiltered Merged DataFrame:")

print(merged_df_filtered)

步骤4:索引对齐

如果我们想要将薪资信息与员工信息进行索引对齐,可以使用join()方法。

python代码

# 索引对齐

df_employees.set_index('EmployeeID', inplace=True)

df_salaries.set_index('EmployeeID', inplace=True)

joined_df = df_employees.join(df_salaries)

print("\nJoined DataFrame:")

print(joined_df)

步骤5:参数和选项

在merge()和join()函数中,我们可以使用不同的参数来定制连接的行为。

python代码

# 使用不同的连接参数

merged_df = pd.merge(df_employees, df_departments, on='DepartmentID', how='left', suffixes=('', '_dept'))

merged_df = pd.merge(merged_df, df_salaries, on='EmployeeID', how='left', suffixes=('', '_salary'))

print("\nMerged DataFrame with Suffixes:")

print(merged_df)

步骤6:实际案例演示

通过一个实际的案例,演示多表连接、连接条件设置和索引对齐的应用。

python代码

# 假设我们有另一个数据集,包含更多员工的薪资信息

data_additional_salaries = {

'EmployeeID': [4],

'Salary': [70000]

}

df_additional_salaries = pd.DataFrame(data_additional_salaries)

# 外连接合并所有薪资信息

full_outer_join = pd.merge(df_employees, df_salaries.append(df_additional_salaries), on='EmployeeID', how='outer')

print("\nFull Outer Join:")

print(full_outer_join)

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言