0.初始数据框架
# df1、df2、df3是三个个DataFrame对象
df1 = pd.DataFrame({'id': ['01', '02', '03', '04'],
'name': ['jack', 'rose', 'tom', 'marry']})
df2 = pd.DataFrame({'id': ['01', '02', '03', '04'],
'score': [82, 96, 67, 85]})
df3 = pd.DataFrame({'id':['04','06'],
'name':['marry','tina']})
print('df1的数据框架为:\n',df1)
print('df2的数据框架为:\n',df2)
print('df3的数据框架为:\n',df3)
1. join
用merge实现 left join、inner join 等操作。
merge函数是Pandas库中的函数,它用于根据一个或多个键合并两个DataFrame对象的行。
参数on:用于连接的列名,必须在两个DataFrame中都存在。
参数how:连接方式,可以是'left'、'right'、'outer'或'inner'。
代码实现:
import pandas as pd
# df1、df2、df3是三个个DataFrame对象
df1 = pd.DataFrame({'id': ['01', '02', '03', '04'],
'name': ['jack', 'rose', 'tom', 'marry']})
df2 = pd.DataFrame({'id': ['01', '02', '03', '04'],
'score': [82, 96, 67, 85]})
df3 = pd.DataFrame({'id':['04','06'],
'name':['marry','tina']})
# 使用merge实现left join
print('inner join实现:')
result = df1.merge(df2, on='id', how='left')
print(result)
# 使用merge实现inner join
print('inner join实现:')
result = df1.merge(df3, on='id', how='inner')
print(result)
# outer join和right join同理,不再演示
运行结果:
2.union all和union
用pandas库的concat函数实现数据集合并,
pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
参数说明:
objs:要连接的对象列表,可以是 DataFrame、Series 或者这些对象的序列。必须指定。
axis:指定连接的轴。默认是 axis=0,表示在竖向上拼接(结果会变长)。如果 axis=1,表示在横向上进行拼接(结果会变宽)。
join:指定拼接方式。join='outer':取并集,即所有数据都会取到,缺失值用 NaN 填充。join='inner':使用交集的列,丢弃非交集的行或列,即过滤掉NaN的数据。
ignore_index:如果为 True,重新计算索引,索引连续。
keys:用于创建层次化索引的标签数组。传递一个列表,用于创建层次化索引。如果传递了 keys,将创建 MultiIndex。
levels:指定用作层次化索引的各级标签。
names:指定用作层次化索引各级的名称。
verify_integrity:如果为 True,检查结果对象的新轴是否重复。如果发现重复,则引发异常。
sort:如果为 True,将在连接轴上对结果进行排序。默认为 False,这样可以更好地维护元素的顺序。
copy:如果为 False,避免复制对象数据。默认为 True,即复制数据。
代码实现:
import pandas as pd
# df1、df2、df3是三个个DataFrame对象
df1 = pd.DataFrame({'id': ['01', '02', '03', '04'],
'name': ['jack', 'rose', 'tom', 'marry']})
df2 = pd.DataFrame({'id': ['01', '02', '03', '04'],
'score': [82, 96, 67, 85]})
df3 = pd.DataFrame({'id':['04','06'],
'name':['marry','tina']})
# 使用concat实现union all
print('union all结果:')
result = pd.concat([df1, df3], ignore_index=True) # concat用于合并两个DataFrame。ignore_index=True参数确保结果DataFrame的索引是重新计算的
print(result)
# 使用concat实现union
print('union结果:')
result = pd.concat([df1, df3], ignore_index=True).drop_duplicates() # drop_duplicates去重。
print(result)
运行结果:
扩展:
drop_duplicates()方法:
drop_duplicates()是Pandas库中的一个函数,它的作用是从DataFrame中删除重复的行,用于处理数据分析时遇到的重复数据问题。
drop_duplicates()方法的语法包括三个主要参数:
subset(指定用于检测重复的列,默认为所有列)、
keep(指定保留重复行的方式,可以是'first'、'last'或False,分别表示保留第一次出现的重复行、保留最后一次出现的重复行或删除所有重复行)
inplace(一个布尔值,表示是否在原地修改DataFrame或返回一个新的DataFrame)
3.总结
concat相当于SQL中的union和union all,用于将数据集进行拼接。比如两个客户表的数据需要合并到一起,相当于竖向拼接,此时用axis=0。如果一个表存客户姓名,另一个表存客户年龄,此时用横向拼接,即axis=1。而join='inner'或join='outer'则控制的是拼接时对于没有完全对应上的列是否需要保留,inner取交集不保留,outer取并集保留。
merge相当于SQL中的各种join关联操作,根据某个key值将数据关联起来方便后续的分析处理。