1 数据合并之join
join:默认情况下他是把行索引相同的数据合并到一起
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.ones((2,4)),index=['A','B'],columns=list('abcd'))
df2 = pd.DataFrame(np.zeros((3,3)),index=['A','B','C'],columns=list('xyz'))
print(df1)
# a b c d
# A 1.0 1.0 1.0 1.0
# B 1.0 1.0 1.0 1.0
print(df2)
# x y z
# A 0.0 0.0 0.0
# B 0.0 0.0 0.0
# C 0.0 0.0 0.0
df3 = df1.join(df2) #行数以df1为准
print(df3)
# a b c d x y z
# A 1.0 1.0 1.0 1.0 0.0 0.0 0.0
# B 1.0 1.0 1.0 1.0 0.0 0.0 0.0
df4 = df2.join(df1) #行数以df2为准,df1中的没有值为nan
print(df4)
# x y z a b c d
# A 0.0 0.0 0.0 1.0 1.0 1.0 1.0
# B 0.0 0.0 0.0 1.0 1.0 1.0 1.0
# C 0.0 0.0 0.0 NaN NaN NaN NaN
2 数据合并之merge
merge:按照指定的列把数据按照一定的方式合并到一起
-
当两个dataframe具有相同的column时,若两个column中没有相同的value,则会merge一个空的dataframe
-
直接使用merge合并两个DataFrame, res = pd.merge(left,right) ,不加任何属性参数的情况下,默认是inner合并
-
res = pd.merge(left,right,on=‘key’),当加上on属性的时候,是基于key列来合并,通过key的每一个值来查找左右两边的数据,组成新的DataFrame
-
merge操作实现两个DataFrame之间的合并。merge的使用方法及参数解释如下:
pd.merge(left, right, on=None, how='inner', 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和第二个DataFrame对象,merge只能实现两个DataFrame的合并,无法一次实现多个合并
-
how:合并的方式,默认为inner取参考column的交集,outer取并集保留所有行;outer、left、right中的缺失值都以NaN填充;left按照左边对象为参考进行合并即保留左边的所有行,right按照右边对象为参考进行合并即保留右边所有行,
-
left_on=None和right_on=None:以上on是在两个df有相同的column的情况下使用,如果两个df没有相同的column,使用left_on和right_on分别指明左边和右边的参考column
-
left_index和right_index:指定是否以索引为参考进行合并
-
sort:合并结果是否按on指定的参考进行排序
-
suffixed:合并后如果有重复column,分别加上什么后缀
-
on:指定参考column,如果不指定默认为None,以两者相同列的最多数为参考;index重新生成为从0开始的整数。
import pandas as pd
df1 = pd.DataFrame({
'key1':['a','b','c','d'],'key2':['e','f','g','h'],'key3':['i','j','k','l']}