pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)

前言

在运用pandas进行数据分析时,经常需要将DataFrame进行拼接、合并。

pandas提供的API主要包括:append、assign、join、merge、concat。

每个API的不同特点汇总如下:

API

拼接行

(变高)

拼接列

(变宽)

特点
append index重复无所谓,直接叠加
assign 增加的列名(column name)无需加引号
join

关键字(key):
原始数据(the calling DataFrame)的行或列标签(index or column name),
后续数据(the other)的行标签(index)

how:

4种,默认是原始数据(the calling DataFrame)的标签(left

merge

关键字(key):
原始数据(the calling DataFrame)的行或列标签(index or column name),
后续数据(the other)的行或列标签(index or column name)

how:

4种,默认是交集(inner

concat

axis:

默认是0,拼接行(变高)

join:

2种,默认是并集(outer

一、append

append,是进行行(index)的拼接。

1、列标签(columns)一致

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第1张图片

 代码如下:

np_array_1 = [[1,2,3],
              [4,5,6]]
df1 = pd.DataFrame(data = np_array_1,
                  index=['甲','乙'],
                  columns=list('ABC'))
print(df1)

np_array_2 = [[7,8,9],
              [10,11,12]]
df2 = pd.DataFrame(data = np_array_2,
                  index=['丙','丁'],
                  columns=list('ABC'))
print(df2)

df_append = df1.append(df2)
print(df_append)

运行结果:

    A  B  C
甲  1  2  3
乙  4  5  6

    A   B   C
丙   7   8   9
丁  10  11  12

    A   B   C
甲   1   2   3
乙   4   5   6
丙   7   8   9
丁  10  11  12

在拼接时,可以通过写入参数(ignore_index=True),忽略原始index,形成新的index。

代码如下:

df_append = df1.append(df2,ignore_index=True)
print(df_append)

运行结果(df_append 的index发生了变化):

    A  B  C
甲  1  2  3
乙  4  5  6

    A   B   C
丙   7   8   9
丁  10  11  12

    A   B   C
0   1   2   3
1   4   5   6
2   7   8   9
3  10  11  12

2、列标签(columns)不一致

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第2张图片

 代码如下:

np_array_1 = [[1,2,3],
              [4,5,6]]
df1 = pd.DataFrame(data = np_array_1,
                  index=['甲','乙'],
                  columns=list('ABC'))
print(df1)

np_array_2 = [[7,8,9],
              [10,11,12]]
df2 = pd.DataFrame(data = np_array_2,
                  index=['丙','丁'],
                  columns=list('ABD'))
print(df2)

df_append = df1.append(df2)
print(df_append)

运行结果(以 NaN 填充):

    A  B  C
甲  1  2  3
乙  4  5  6

    A   B   D
丙   7   8   9
丁  10  11  12

    A   B    C     D
甲   1   2  3.0   NaN
乙   4   5  6.0   NaN
丙   7   8  NaN   9.0
丁  10  11  NaN  12.0

二、assign

assign,添加列(column)

1、根据已有列(column)添加

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第3张图片

 代码如下:

np_array = [[1,2,3],
            [4,5,6],
            [7,8,9]]
df = pd.DataFrame(data = np_array,
                  index=['甲','乙','丙'],
                  columns=list('ABC'))
print(df)

df_assign = df.assign(D=df['A'] *2)
print(df_assign)

运行结果:

    A  B  C
甲  1  2  3
乙  4  5  6
丙  7  8  9

    A  B  C   D
甲  1  2  3   2
乙  4  5  6   8
丙  7  8  9  14

2、添加新列(column)

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第4张图片

 代码如下:

df_assign = df.assign(Name='Andy')
print(df_assign)

运行结果:

    A  B  C
甲  1  2  3
乙  4  5  6
丙  7  8  9

    A  B  C  Name
甲  1  2  3  Andy
乙  4  5  6  Andy
丙  7  8  9  Andy

三、join

join,添加列(columns)

1、列标签(columns)无重叠

(1)how = left

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第5张图片

 代码如下(默认left):

np_array_1 = [[1,2,3],
              [4,5,6],
              [7,8,9],
              [10,11,12]]
df1 = pd.DataFrame(data = np_array_1,
                  index=['01收入','02成本','03收益','04利润'],
                  columns=['1月','2月','3月'])
print(df1)

np_array_2 = [[1,2,3],
              [4,5,6]]
df2 = pd.DataFrame(data = np_array_2,
                  index=['01收入','03损失'],
                  columns=['4月','5月','6月'])
print(df2)

df_join = df1.join(df2)
print(df_join)

运行结果(以原始DF的index为准):

      1月  2月  3月
01收入   1   2   3
02成本   4   5   6
03收益   7   8   9
04利润  10  11  12

      4月  5月  6月
01收入   1   2   3
03损失   4   5   6

      1月  2月  3月  4月   5月   6月
01收入   1   2   3  1.0  2.0  3.0
02成本   4   5   6  NaN  NaN  NaN
03收益   7   8   9  NaN  NaN  NaN
04利润  10  11  12  NaN  NaN  NaN

(2)how = right

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第6张图片

 代码如下(right):

df_join = df1.join(df2,how='right')
print(df_join)

运行结果(以后续DF的index为准):

       1月  2月  3月
01收入   1   2   3
02成本   4   5   6
03收益   7   8   9
04利润  10  11  12

      4月  5月  6月
01收入   1   2   3
03损失   4   5   6

       1月   2月   3月  4月  5月  6月
01收入  1.0  2.0  3.0   1   2   3
03损失  NaN  NaN  NaN   4   5   6

(3)how = outer

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第7张图片

 代码如下(outer):

df_join = df1.join(df2,how='outer')
print(df_join)

运行结果(并集):

      1月  2月  3月
01收入   1   2   3
02成本   4   5   6
03收益   7   8   9
04利润  10  11  12

      4月  5月  6月
01收入   1   2   3
03损失   4   5   6

        1月    2月    3月  4月   5月   6月
01收入   1.0   2.0   3.0  1.0  2.0  3.0
02成本   4.0   5.0   6.0  NaN  NaN  NaN
03损失   NaN   NaN   NaN  4.0  5.0  6.0
03收益   7.0   8.0   9.0  NaN  NaN  NaN
04利润  10.0  11.0  12.0  NaN  NaN  NaN

(4)how = inner

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第8张图片

 代码如下(inner):

df_join = df1.join(df2,how='inner')
print(df_join)

运行结果(交集):

      1月  2月  3月
01收入   1   2   3
02成本   4   5   6
03收益   7   8   9
04利润  10  11  12

      4月  5月  6月
01收入   1   2   3
03损失   4   5   6

      1月  2月  3月 4月  5月  6月
01收入   1   2   3   1   2   3

2、列标签(columns)有重叠

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第9张图片

 代码如下:

np_array_1 = [[1,2,3],
              [4,5,6],
              [7,8,9],
              [10,11,12]]
df1 = pd.DataFrame(data = np_array_1,
                  index=['01收入','02成本','03收益','04利润'],
                  columns=['1月','2月','3月'])
print(df1)

np_array_2 = [[1,2,3],
              [4,5,6]]
df2 = pd.DataFrame(data = np_array_2,
                  index=['01收入','03损失'],
                  columns=['3月','5月','6月'])
print(df2)

df_join = df1.join(df2,how='outer',lsuffix='_1',rsuffix='_2')
print(df_join)

运行结果(添加后缀suffix):

      1月  2月  3月
01收入   1   2   3
02成本   4   5   6
03收益   7   8   9
04利润  10  11  12

      3月  5月  6月
01收入   1   2   3
03损失   4   5   6

        1月    2月  3月_1  3月_2  5月   6月
01收入   1.0   2.0   3.0   1.0  2.0  3.0
02成本   4.0   5.0   6.0   NaN  NaN  NaN
03损失   NaN   NaN   NaN   4.0  5.0  6.0
03收益   7.0   8.0   9.0   NaN  NaN  NaN
04利润  10.0  11.0  12.0   NaN  NaN  NaN

3、on 的应用

pandas 拼接 合并 DataFrame(append、assign、join、merge、concat)(一)_第10张图片

代码如下:

np_array_1 = [[1,2,'Andy_1'],
              [4,5,6],
              [7,8,'Andy_2'],
              [10,11,12]]
df1 = pd.DataFrame(data = np_array_1,
                  index=['甲','乙','丙','丁'],
                  columns=list('ABC'))
print(df1)

np_array_2 = [[1,2,3],
              [4,5,6]]
df2 = pd.DataFrame(data = np_array_2,
                  index=['Andy_1','Andy_2'],
                  columns=list('DEF'))
print(df2)

df_join = df1.join(df2,on='C')
print(df_join)

运行结果(以原始DF的列(column)作为关键字(key)):

     A   B       C
甲   1   2  Andy_1
乙   4   5       6
丙   7   8  Andy_2
丁  10  11      12

        D  E  F
Andy_1  1  2  3
Andy_2  4  5  6

     A   B       C    D    E    F
甲   1   2  Andy_1  1.0  2.0  3.0
乙   4   5       6  NaN  NaN  NaN
丙   7   8  Andy_2  4.0  5.0  6.0
丁  10  11      12  NaN  NaN  NaN

你可能感兴趣的:(数据分析,pandas,数据挖掘)