栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

前言

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

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

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

API

拼接行

(变高)

拼接列

(变宽)

特点
appendindex重复无所谓,直接叠加
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)一致

 代码如下:

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)不一致

 代码如下:

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)添加

 代码如下:

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)

 代码如下:

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

 代码如下(默认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

 代码如下(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

 代码如下(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

 代码如下(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)有重叠

 代码如下:

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 的应用

代码如下:

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422882.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号