Pandas学习笔记5 合并——Datawhale组队学习

joyful-pandas/第5章 合并.ipynb
感觉如果对数据库操作比较熟悉的话,这部分理解起来就会很容易。

  1. append
#利用序列添加行(必须指定name)
s = pd.Series({'Gender':'F','Height':188},name='new_row')
df_append.append(s)
#用DataFrame添加表¶
df_temp = pd.DataFrame({'Gender':['F','M'],'Height':[188,176]},index=['new_1','new_2'])
df_append.append(df_temp)
  1. assign
#添加列,列名直接由参数指定
s = pd.Series(list('abcd'),index=range(4))
df_append.assign(Letter=s)
#一次添加多个列
df_append.assign(col1=lambda x:x['Gender']*2,
                 col2=s)
  1. combine按照表的顺序轮流进行逐列循环且自动索引对齐,缺失值为NaN
df_combine_1 = df.loc[:1,['Gender','Height']].copy()
df_combine_2 = df.loc[10:11,['Gender','Height']].copy()
df_combine_1.combine(df_combine_2,lambda x,y:print(x,y))
  1. combine_first:用df2填补df1的缺失值
df1 = pd.DataFrame({'A': [None, 0], 'B': [None, 4]})
df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
df1.combine_first(df2)
  1. update:返回的框索引只会与被调用框的一致(默认使用左连接),第二个框中的nan元素不会起作用,没有返回值,直接在df上操作
df1 = pd.DataFrame({'A': [1, 2, 3],
                    'B': [400, 500, 600]})
df2 = pd.DataFrame({'B': [4, 5, 6],
                    'C': [7, 8, 9]})
df1.update(df2)
  1. concat:在两个维度上拼接,默认纵向凭借(axis=0),拼接方式默认外连接
    外连接,就是取拼接方向的并集,而内连接取拼接方向(若使用默认的纵向拼接,则为列的交集)的交集
    Pandas学习笔记5 合并——Datawhale组队学习_第1张图片
    Pandas学习笔记5 合并——Datawhale组队学习_第2张图片

  2. merge函数的作用是将两个pandas对象横向合并,遇到重复的索引项时会使用笛卡尔积,默认inner连接,可选left、outer、right连接。
    左连接,就是指以第一个表索引为基准,右边的表中如果不再左边的则不加入,如果在左边的就以笛卡尔积的方式加入
    merge/join与concat的不同之处在于on参数,可以指定某一个对象为key来进行连接

pd.merge(left, right, how='outer', on=['key1','key2'])
# validate检验的是到底哪一边出现了重复索引,如果是“one_to_one”则两侧索引都是唯一,如果"one_to_many"则左侧唯一
pd.merge(left, right, on='B', how='outer',validate='one_to_one')
  1. join函数作用是将多个pandas对象横向拼接,遇到重复的索引项时会使用笛卡尔积,默认左连接,可选inner、outer、right连接
# many_to_one模式下的合并,join更为方便
left.join(right, on='key')
# 多层key
left.join(right, on=['key1','key2'])

你可能感兴趣的:(Python)