import numpy as np import pandas as pd from pandas import Series,DataFrame # Numpy数据合并 arr = np.random.randint(0,10,(3,3)) arr # concatenate((a1, a2, ...), axis=0, out=None) np.concatenate((arr,arr)) # 默认axis = 0,按列 np.concatenate((arr,arr),axis = 1)# 按行 data = {i : [a for a in range(2)] for i in ["A","B"]} data # 声明一个函数,可以动态创建DataFrame def mk_df(cols,indx): data = {c : [c + str(i) for i in indx] for c in cols} #print(data) return DataFrame(data, columns = cols, index = indx) mk_df(["A", "B"],[1, 2, 3]) # pandas处理多组数据的时候往往会要用到数据的合并处理,其中有三种方式,concat、append和merge。 # 用concat是一种基本的合并方式。而且concat中有很多参数可以调整,合并成你想要的数据形式。axis来指明合并方向。axis=0是预设值,因此未设定任何参数时,函数默认axis=0。(0表示上下合并,1表示左右合并) # append只有纵向合并,没有横向合并。 # 根据两组数据中的关键字key来合并(key在两组数据中是完全一致的)。 # 使用concat合并DataFrame # pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=None, copy=True) # concat函数是在pandas下的方法,可以将数据根据不同的轴作简单的融合 # objs: series,dataframe或者是panel构成的序列list # axis: 需要合并链接的轴,0是行,1是列 # join:连接的方式 inner,或者outer # objs:Series,DataFrame或Panel对象的序列或映射。如果传递了dict,则排序的键将用作键参数,除非它被传递,在这种情况下,将选择值(见下文)。任何无对象将被静默删除,除非它们都是无,在这种情况下将引发一个ValueError。 # axis:{0,1,...},默认为0。沿着连接的轴。 # join:{'inner','outer'},默认为“outer”。如何处理其他轴上的索引。outer为联合和inner为交集。 # ignore_index:boolean,default False。如果为True,请不要使用并置轴上的索引值。结果轴将被标记为0,...,n-1。如果要连接其中并置轴没有有意义的索引信息的对象,这将非常有用。注意,其他轴上的索引值在连接中仍然受到尊重。 # join_axes:Index对象列表。用于其他n-1轴的特定索引,而不是执行内部/外部设置逻辑。 # keys:序列,默认值无。使用传递的键作为最外层构建层次索引。如果为多索引,应该使用元组。 # levels:序列列表,默认值无。用于构建MultiIndex的特定级别(唯一值)。否则,它们将从键推断。 # names:list,default无。结果层次索引中的级别的名称。 # verify_integrity:boolean,default False。检查新连接的轴是否包含重复项。这相对于实际的数据串联可能是非常昂贵的。 # copy:boolean,default True。如果为False,请勿不必要地复制数据。 d1 = mk_df(["A","B"],[0,1]) d2 = mk_df(["A","B"],[1,2]) display(d1,d2) pd.concat((d1,d2))# 默认axis=0 pd.concat((d1,d2), axis = 1)# 按行,没意义 # 合并时,索引可以重复 d3 = mk_df(["A","B"],[1,1,2]) d4 = mk_df(["A","B"],[1,2,3]) display(d3,d4) pd.concat((d3,d4)) # 索引可以重置 pd.concat((d3,d4),ignore_index = True) # 列名不一致,也可以合并,默认外连接,类似数据库中的全外连接 d1 = mk_df(["A","B"],[1,3]) d2 = mk_df(["B","C"],[2,4]) display(d1,d2) pd.concat((d1,d2)) # 设置join属性,实现内连接 pd.concat((d1,d2),join = "inner") # join_axes,可以指定以那个DataFrame的索引为准,类似数据库中左右连接 d3 = mk_df(["A","C","D"],[0,2,4]) d4 = mk_df(["C","D","E"],[3,6,9]) display(d3,d4) pd.concat((d3,d4)) # 以d3的列为标准,没能匹配项被NaN pd.concat((d3,d4),join_axes = [d3.columns]) #以d4的列为标准,没能匹配项被NaN pd.concat((d3,d4),join_axes = [d4.columns]) # append,直接追加到末尾 d1 = mk_df(["大众","宝马"],[1,2,3,4,5]) d2 = mk_df(["大众","宝马"],[6,7,8,9,10]) display(d1,d2) d1.append(d2) # DataFrame.merge(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) # merge: 合并数据集, 通过left, right确定连接字段,默认是两个数据集相同的字段 # left 参与合并的左侧DataFrame # right 参与合并的右侧DataFrame # how 连接方式:‘inner’(默认);还有,‘outer’、‘left’、‘right’ # on 用于连接的列名,必须同时存在于左右两个DataFrame对象中,如果位指定,则以left和right列名的交集作为连接键 # left_on 左侧DataFarme中用作连接键的列 # right_on 右侧DataFarme中用作连接键的列 # left_index 将左侧的行索引用作其连接键 # right_index 将右侧的行索引用作其连接键 # sort 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能 # suffixes 字符串值元组,用于追加到重叠列名的末尾,默认为(‘_x’,‘_y’).例如,左右两个DataFrame对象都有‘data’,则结果中就会出现‘data_x’,‘data_y’ # copy 设置为False,可以在某些特殊情况下避免将数据复制到结果数据结构中。默认总是赋值 d1 = DataFrame({"员工":["张三","李四","王五"],"部门":["人力资源部","市场部","销售部"]}) d2 = DataFrame({"员工":["张三","李四","王五"],"工作时间":[2,4,5]}) display(d1,d2) pd.merge(d1,d2) d1 = DataFrame({"员工":["张三","李四","李四"],"部门":["人力资源部","市场部","销售部"]}) d2 = DataFrame({"员工":["张三","李四","钱八"],"工作时间":[2,4,5]}) display(d1,d2) pd.merge(d1,d2) d1 = DataFrame({"员工":["张三","李四","黄三"],"部门":["人力资源部","市场部","销售部"],"薪水":[10000,9000,8000]}) d2 = DataFrame({"员工":["张三","李四","钱八"],"部门":["人力资源部","市场部","销售部"],"工作时间":[2,4,5]}) display(d1,d2) d1 = DataFrame({"员工":["张三","李四","黄三"],"部门":["人力资源部","市场部","销售部"],"薪水":[10000,9000,8000]}) d2 = DataFrame({"员工":["张三","李四","钱八"],"部门":["市场部","市场部","销售部"],"工作时间":[2,4,5]}) display(d1,d2) pd.merge(d1,d2) #通过参数on来说明根据那列进行匹配 pd.merge(d1,d2,on = "员工") pd.merge(d1,d2,on = "部门") #适用于两表列表不一致但要匹配时的场景left_on左表的匹配项 right_on右表的匹配项 pd.merge(d1,d2,left_on = "员工",right_on = "员工") #how参数表示连接方式默认inner内连接 #全外连接 pd.merge(d1,d2,left_on="员工",right_on="员工",how = "outer") #左连接 pd.merge(d1,d2,left_on="员工",right_on="员工",how = "left") #右连接 pd.merge(d1,d2,left_on="员工",right_on="员工",how = "right")