joyful-pandas/第5章 合并.ipynb
感觉如果对数据库操作比较熟悉的话,这部分理解起来就会很容易。
#利用序列添加行(必须指定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)
#添加列,列名直接由参数指定
s = pd.Series(list('abcd'),index=range(4))
df_append.assign(Letter=s)
#一次添加多个列
df_append.assign(col1=lambda x:x['Gender']*2,
col2=s)
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))
df1 = pd.DataFrame({'A': [None, 0], 'B': [None, 4]})
df2 = pd.DataFrame({'A': [1, 1], 'B': [3, 3]})
df1.combine_first(df2)
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)
concat:在两个维度上拼接,默认纵向凭借(axis=0),拼接方式默认外连接
外连接,就是取拼接方向的并集,而内连接取拼接方向(若使用默认的纵向拼接,则为列的交集)的交集
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')
# many_to_one模式下的合并,join更为方便
left.join(right, on='key')
# 多层key
left.join(right, on=['key1','key2'])