Pandas笔记二(数据连接、合并)
数据连接和合并
总结差别:
- 1、当没有索引时:merge、join为按照一定条件合并
- 2、当有索引、并按照索引合并时,得到结果为两者混合到一起了,重新按照一定规则排序了。
- 3、当没有索引时、concat不管列名,直接加到一起,可以加到后面、也可以加到右边,axis=0为加到后面,axis=1为加到右边,左边的数据结构没有变,变的是右边数据结构。
- 4、当有索引、并按照索引合并时,得到结果两者混合到一起了。
数据连接 merge
def merge(left, right, how='inner', on=None, left_on=None, right_on=None,
left_index=False, right_index=False, sort=False,
suffixes=('_x', '_y'), copy=True, indicator=False,
validate=None)
参数 | 说明 |
---|---|
left与right | 两个不同的DataFrame |
how | 指的是合并(连接)的方式有inner(内连接),left(左外连接),right(右外连接),outer(全外连接);默认为inner,连接时没有就以NaN填充 |
on | 指的是用于连接的列索引名称。必须存在左右两个DataFrame对象中,如果没有指定且其他参数也未指定则以两个DataFrame的列名交集做为连接键 |
left_on | 左则DataFrame中用作连接键的列名;这个参数中左右列名不相同,但代表的含义相同时非常有用。 |
right_on | 右则DataFrame中用作 连接键的列名 |
left_index | 使用左则DataFrame中的行索引做为连接键 |
right_index | 使用右则DataFrame中的行索引做为连接键 |
sort | 默认为True,将合并的数据进行排序。在大多数情况下设置为False可以提高性能 |
suffixes | 字符串值组成的元组,用于指定当左右DataFrame存在相同列名时在列名后面附加的后缀名称,默认为(’_x’,’_y’) |
copy | 默认为True,总是将数据复制到数据结构中;大多数情况下设置为False可以提高性能 |
indicator | 在 0.17.0中还增加了一个显示合并数据中来源情况;如只来自己于左边(left_only)、两者(both) |
df1 = pd.DataFrame(
{
'key1':list('abcdefgh'),
'data1':np.random.randint(-5,10,8)}
)
df2 = pd.DataFrame(
{
'key2':list('abcde'),
'data2':np.random.randint(-5,10,5)}
)
# 两表合并 根据on参数相同的值合并,如果不指定默认根据相同的列合并
# print(pd.merge(df1,df2, on='key', suffixes=['左表', '右表'])) # suffixes指定后缀
# 如果两张表没有相同的列的时候,可以通过left_on和right_on来指定连接条件(列)
print(pd.merge(df1,df2, left_on='key1', right_on='key2'))
# 参数how默认是inner也就是内联,如果outer就是并集,没有就以NaN填充
print(pd.merge(df1,df2, left_on='key1', right_on='key2', how='outer'))
# 左连接和右连接,意思是以左为准或者是以右为准
print('#####################')
print(pd.merge(df1,df2