本节主要讲解pandas中的两种数据拼接操作,第一pd.merge()横向连接和pd.concat()纵向连接。还是那句话,我这只是简单地介绍一下,如果想要熟练掌握,参加一两个比赛还是必要的。
介绍pd.merge()函数的时候主要从两个方面介绍一下:
第一: merge()中如何根据特定的列合并数据, 默认的时候 merge()函数对数据进行合并的步骤如下:
1、首先是直接从两个数据集中找出列名相同的数据列。
2、然后对于记录中列即出现在数据集A又出现在数据集B, 则将该条记录保存到结果数据集中。否则丢弃这条记录
第二: merge(A, B)中四种数据合并方式的特点 inner outer left right (这个看书很好理解,但是想要表达的很清楚有点难,语文不好请见谅)
1、inner 表示该条记录的值即出现A又要出现在数据集B之中 才将其保存到结果数据集中
2、outer 表示该条记录的值出现在A,B中任何一个,都要把合并之后的结果数据保存到最后
3、 left 表示该条记录的值出现在数据集A中,就要把该记录保存到数据集中
4、 right 表示该条记录的值出现在数据集B中的结果也保存到结果记录之中
import numpy as np
import pandas as pd
data_1 = {'name': ['YYLin', 'GXYan', 'YYLin', 'YYLin_3'], 'birth_day': ['2000-01', '2000-01', '2000-01', '2001-04'],
'age': [1, 2, 3, 4]}
data_2 = {'name': ['YYLin', 'GXYan', 'GXYan', 'GXYan_3'], 'birth_day': ['2000-01', '2000-01', '2001-01', '2001-04'],
'age': [1, 6, 7, 8]}
merce_data_1 = pd.DataFrame(data_1)
merce_data_2 = pd.DataFrame(data_2)
print("原始数据的信息:\n", merce_data_1, '\n', merce_data_2)
test_merce_keyword = True
if test_merce_keyword:
# 不指定关键字进行合并的结果
merce_1 = pd.merge(merce_data_1, merce_data_2)
print("不指定合并的关键字时合并的结果:\n", merce_1)
# 指定关键时进行合并的结果
merce_2 = pd.merge(merce_data_1, merce_data_2, on=['name', 'birth_day'])
print("指定特定的列进行合并的结果:\n", merce_2)
else:
# pandas中使用merge()进行合并的四种不同的方式 inner outer left right
merge_method = 'right'
if merge_method == 'inner':
merce_3 = pd.merge(merce_data_1, merce_data_2, on=['name', 'birth_day'], how='inner')
print("使用inner进行合并之后的结果是:\n", merce_3)
elif merge_method == 'outer':
merce_4 = pd.merge(merce_data_1, merce_data_2, on=['name', 'birth_day'], how='outer')
print("使用outer进行合并之后的结果是:\n", merce_4)
elif merge_method == 'left':
merce_5 = pd.merge(merce_data_1, merce_data_2, on=['name', 'birth_day'], how='left')
print("使用left进行合并之后的结果是:\n", merce_5)
else:
merce_6 = pd.merge(merce_data_1, merce_data_2, on=['name', 'birth_day'], how='right')
print("使用right进行合并之后的结果是:\n", merce_6)
使用pandas中concat()进行拼接操作,数据集还是上面的数据集,这里注意一点就是concat()函数默认是使用原来数据集中的索引,所以如果想要使用自己定义的索引的话,参数中需要使用ignore_index=True这个选项。
实验结果# 使用pandas中的concat()函数进行拼接操作
ignore_index = True
if ignore_index:
concat_result = pd.concat([merce_data_1, merce_data_2], ignore_index=True)
print("使用pandas中的concat()函数拼接之后的结果:\n", concat_result)
else:
concat_result = pd.concat([merce_data_1, merce_data_2])
print("使用pandas中的concat()函数拼接之后的结果:\n", concat_result)