Pandas concat()例子

时间:2020-02-23 14:42:05  来源:igfitidea点击:

Pandas concat()方法用于连接pandas对象,例如DataFrames和Series。
我们可以传递各种参数来更改串联操作的行为。

1. Pandas concat()语法

concat()方法的语法为:

concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
         keys=None, levels=None, names=None, verify_integrity=False,
         sort=None, copy=True)
  • objs:一系列要连接的熊cat 对象。

  • join:可选参数,用于定义如何处理另一轴上的索引。
    有效值为"内部"和"外部"。

  • join_axes:在0.25.0版中已弃用。

  • ignore_index:如果为True,则将忽略源对象的索引,并将从0,1,2..n开始的一系列索引分配给结果。

  • 键:将标识符添加到结果索引的序列。
    这有助于在输出中标记源对象。

  • 级别:指定创建多索引的唯一级别的序列。

  • names:结果层次索引中各个级别的名称。

  • verify_integrity:检查新的串联轴是否包含重复项。
    这是一项昂贵的操作。

  • sort:如果联接为"外部"时未对齐轴,则对非串联轴进行排序。
    在版本0.23.0中添加

  • 复制:如果为False,则不必复制数据。

推荐读物:Python Pandas教程

2. Pandas concat()示例

让我们看一个连接两个DataFrame对象的简单示例。

import pandas

d1 = {"Name": ["hyman", "Lisa"], "ID": [1, 2]}
d2 = {"Name": "David", "ID": 3}

df1 = pandas.DataFrame(d1, index={1, 2})
df2 = pandas.DataFrame(d2, index={3})

print('\n', df1)
print('\n', df2)

df3 = pandas.concat([df1, df2])

print('\n', df3)

输出:

    Name  ID
1  hyman   1
2    Lisa   2

   Name  ID
3  David   3

    Name  ID
1  hyman   1
2    Lisa   2
3   David   3

请注意,串联是按行(即0轴)执行的。
此外,来自源DataFrame对象的索引也保留在输出中。

3.沿列(即1轴)连接

d1 = {"Name": ["hyman", "Lisa"], "ID": [1, 2]}
d2 = {"Role": ["Admin", "Editor"]}

df1 = pandas.DataFrame(d1, index={1, 2})
df2 = pandas.DataFrame(d2, index={1, 2})

df3 = pandas.concat([df1, df2], axis=1)
print('\n', df3)

输出:

    Name  ID    Role
1  hyman   1   Admin
2    Lisa   2  Editor

当源对象包含对象的不同种类的数据时,沿着列的串联是有意义的。

4.将关键字分配给串联的DataFrame索引

d1 = {"Name": ["hyman", "Lisa"], "ID": [1, 2]}
d2 = {"Name": "David", "ID": 3}

df1 = pandas.DataFrame(d1, index={1, 2})
df2 = pandas.DataFrame(d2, index={3})

df3 = pandas.concat([df1, df2], keys=["DF1", "DF2"])
print('\n', df3)

输出:

        Name  ID
DF1 1  hyman   1
  2    Lisa   2
DF2 3   David   3

5.忽略串联中的源DataFrame对象

d1 = {"Name": ["hyman", "Lisa"], "ID": [1, 2]}
d2 = {"Name": "David", "ID": 3}

df1 = pandas.DataFrame(d1, index={10, 20})
df2 = pandas.DataFrame(d2, index={30})

df3 = pandas.concat([df1, df2], ignore_index=True)
print('\n', df3)

输出:

    Name  ID
0  hyman   1
1    Lisa   2
2   David   3

当源对象中的索引没有太大意义时,这很有用。
因此我们可以忽略它们,并将默认索引分配给输出DataFrame。