Pandas 合并 concat

要点

pandas处理多组数据的时候往往会要用到数据的合并处理,使用 concat是一种基本的合并方式.而且concat中有很多参数可以调整,合并成你想要的数据形式.

axis (合并方向)

axis=0是预设值,因此未设定任何参数时,函数默认axis=0

import pandas as pd
import numpy as np

#定义资料集
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*2, columns=['a','b','c','d'])

#concat纵向合并
res = pd.concat([df1, df2, df3], axis=0)

#打印结果
print(res)
#     a    b    c    d
# 0  0.0  0.0  0.0  0.0
# 1  0.0  0.0  0.0  0.0
# 2  0.0  0.0  0.0  0.0
# 0  1.0  1.0  1.0  1.0
# 1  1.0  1.0  1.0  1.0
# 2  1.0  1.0  1.0  1.0
# 0  2.0  2.0  2.0  2.0
# 1  2.0  2.0  2.0  2.0
# 2  2.0  2.0  2.0  2.0

仔细观察会发现结果的index是0, 1, 2, 0, 1, 2, 0, 1, 2,若要将index重置,请看例子二

ignore_index (重置 index)

#承上一个例子,并将index_ignore设定为True
res = pd.concat([df1, df2, df3], axis=0, ignore_index=True)

#打印结果
print(res)
#     a    b    c    d
# 0  0.0  0.0  0.0  0.0
# 1  0.0  0.0  0.0  0.0
# 2  0.0  0.0  0.0  0.0
# 3  1.0  1.0  1.0  1.0
# 4  1.0  1.0  1.0  1.0
# 5  1.0  1.0  1.0  1.0
# 6  2.0  2.0  2.0  2.0
# 7  2.0  2.0  2.0  2.0
# 8  2.0  2.0  2.0  2.0

结果的index变0, 1, 2, 3, 4, 5, 6, 7, 8。

join (合并方式)

join='outer'为预设值,因此未设定任何参数时,函数默认join='outer'。此方式是依照column来做纵向合并,有相同的column上下合并在一起,其他独自的column个自成列,原本没有值的位置皆以NaN填充。

import pandas as pd
import numpy as np

#定义资料集
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])

#纵向"外"合并df1与df2
res = pd.concat([df1, df2], axis=0, join='outer')

print(res)
#     a    b    c    d    e
# 1  0.0  0.0  0.0  0.0  NaN
# 2  0.0  0.0  0.0  0.0  NaN
# 3  0.0  0.0  0.0  0.0  NaN
# 2  NaN  1.0  1.0  1.0  1.0
# 3  NaN  1.0  1.0  1.0  1.0
# 4  NaN  1.0  1.0  1.0  1.0

原理同上个例子的说明,但只有相同的column合并在一起,其他的会被抛弃。

#承上一个例子

#纵向"内"合并df1与df2
res = pd.concat([df1, df2], axis=0, join='inner')

#打印结果
print(res)
#     b    c    d
# 1  0.0  0.0  0.0
# 2  0.0  0.0  0.0
# 3  0.0  0.0  0.0
# 2  1.0  1.0  1.0
# 3  1.0  1.0  1.0
# 4  1.0  1.0  1.0

#重置index并打印结果
res = pd.concat([df1, df2], axis=0, join='inner', ignore_index=True)
print(res)
#     b    c    d
# 0  0.0  0.0  0.0
# 1  0.0  0.0  0.0
# 2  0.0  0.0  0.0
# 3  1.0  1.0  1.0
# 4  1.0  1.0  1.0
# 5  1.0  1.0  1.0

join_axes (依照 axes 合并)

import pandas as pd
import numpy as np

#定义资料集
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'], index=[1,2,3])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['b','c','d','e'], index=[2,3,4])

#依照`df1.index`进行横向合并
res = pd.concat([df1, df2], axis=1, join_axes=[df1.index])

#打印结果
print(res)
#     a    b    c    d    b    c    d    e
# 1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
# 2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
# 3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0

#移除join_axes,并打印结果
res = pd.concat([df1, df2], axis=1)
print(res)
#     a    b    c    d    b    c    d    e
# 1  0.0  0.0  0.0  0.0  NaN  NaN  NaN  NaN
# 2  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
# 3  0.0  0.0  0.0  0.0  1.0  1.0  1.0  1.0
# 4  NaN  NaN  NaN  NaN  1.0  1.0  1.0  1.0

append (添加数据)

append只有纵向合并,没有横向合并。

import pandas as pd
import numpy as np

#定义资料集
df1 = pd.DataFrame(np.ones((3,4))*0, columns=['a','b','c','d'])
df2 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
df3 = pd.DataFrame(np.ones((3,4))*1, columns=['a','b','c','d'])
s1 = pd.Series([1,2,3,4], index=['a','b','c','d'])

#将df2合并到df1的下面,以及重置index,并打印出结果
res = df1.append(df2, ignore_index=True)
print(res)
#     a    b    c    d
# 0  0.0  0.0  0.0  0.0
# 1  0.0  0.0  0.0  0.0
# 2  0.0  0.0  0.0  0.0
# 3  1.0  1.0  1.0  1.0
# 4  1.0  1.0  1.0  1.0
# 5  1.0  1.0  1.0  1.0

#合并多个df,将df2与df3合并至df1的下面,以及重置index,并打印出结果
res = df1.append([df2, df3], ignore_index=True)
print(res)
#     a    b    c    d
# 0  0.0  0.0  0.0  0.0
# 1  0.0  0.0  0.0  0.0
# 2  0.0  0.0  0.0  0.0
# 3  1.0  1.0  1.0  1.0
# 4  1.0  1.0  1.0  1.0
# 5  1.0  1.0  1.0  1.0
# 6  1.0  1.0  1.0  1.0
# 7  1.0  1.0  1.0  1.0
# 8  1.0  1.0  1.0  1.0

#合并series,将s1合并至df1,以及重置index,并打印出结果
res = df1.append(s1, ignore_index=True)
print(res)
#     a    b    c    d
# 0  0.0  0.0  0.0  0.0
# 1  0.0  0.0  0.0  0.0
# 2  0.0  0.0  0.0  0.0
# 3  1.0  2.0  3.0  4.0

转载请注明:虚幻私塾 » Pandas 合并 concat

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: pandas.concat 是一个函数,用于将多个 Pandas 数据框(DataFrame)或者 Pandas(Series)按照指定的轴进行连接。它可以按照行或者方向进行连接,具体实现方式取决于指定的轴参数。 语法如下: ``` pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True) ``` 参数说明: - objs: 一个表或者字典,里面包含了要连接的 Pandas 数据框或者 Pandas。 - axis: 指定要连接的轴,0 表示按照行方向连接,1 表示按照方向连接,默认为 0。 - join: 指定连接方式,可以是 'inner' 或者 'outer',默认为 'outer'。 - ignore_index: 如果为 True,则忽略原来数据框中的索引,重新生成一个新的索引。 - keys: 在连接多个数据框的时候,可以使用 keys 参数来指定每个数据框的标签,这样连接之后的数据框就会使用 MultiIndex 来表示。 - levels: 如果使用 keys 参数指定了标签,那么可以使用 levels 参数来指定每个标签的层级结构。 - names: 如果使用 keys 参数指定了标签,那么可以使用 names 参数来指定每个层级的名称。 - verify_integrity: 如果为 True,则在连接之前检查数据框中是否有重复的索引,如果有则抛出 ValueError 异常。 - sort: 如果为 True,则在连接之后对结果进行排序,默认为 False。 - copy: 如果为 True,则返回连接之后的新对象,否则返回原对象的视图。 示例: ``` import pandas as pd # 创建两个数据框 df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}) df2 = pd.DataFrame({'A': [4, 5, 6], 'B': [7, 8, 9]}) # 将两个数据框按照行方向连接 result = pd.concat([df1, df2], axis=0) print(result) ``` 输出: ``` A B 0 1 4 1 2 5 2 3 6 0 4 7 1 5 8 2 6 9 ``` ### 回答2: pandas.concat是一个用于在pandas库中合并数据的函数。它可以水平或垂直地连接不同的数据集,产生一个新的数据集。 pandas.concat函数可以接受多个数据集作为参数,并根据指定的轴进行连接。默认情况下,它会在轴0上进行连接,即垂直连接,将数据集按顺序堆叠起来。例如,如果我们有两个数据集df1和df2,通过pandas.concat([df1, df2])就可以将它们垂直连接起来。 此外,我们还可以通过指定axis参数来进行水平连接。当axis=1时,pandas.concat会将数据集在水平方向上连接起来。这意味着我们可以根据名在水平方向上合并数据集,产生新的。需要注意的是,进行水平连接时,数据集必须有相同的行索引,否则连接将会失败。 在进行连接时,pandas.concat还有其他一些重要的参数。其中,join用于指定连接的方式,默认为'outer',表示采用外连接,即保留所有行和。如果选择'inner',则只保留两个数据集交集部分的行和。另外,我们还可以通过keys参数为连接之后的数据集添加层次化索引。 总之,pandas.concat是一个非常有用的函数,可以将多个数据集合并成一个新的数据集,扩展数据分析的能力。无论是垂直连接还是水平连接,我们都可以根据实际需求选择适当的参数和方法。 ### 回答3: pandas.concat是一个在pandas库中用于合并/连接数据的函数。它可以将多个数据集按照指定的轴方向进行连接,产生一个新的数据集。 pandas.concat函数的常见用法是将具有相同结构的数据集进行拼接。例如,我们可以使用concat函数将两个具有相同名的DataFrame对象连接成一个新的DataFrame对象。连接时可以指定连接的轴方向,默认为0,即按行进行拼接。我们还可以通过设置axis参数来指定为1,表示按进行连接。 除了连接具有相同结构的数据集外,pandas.concat函数还可以用于连接具有不同结构的数据集。在这种情况下,我们可以使用join参数来指定连接方式,有inner、outer、left和right四种连接方式可供选择。默认情况下,join为outer,表示使用外连接的方式进行连接。 此外,pandas.concat函数还可以通过设置keys参数来为合并后的数据集增加层次化索引。如果我们传递一个表给keys参数,合并后的数据集将具有多个层次的索引,其中每个层次对应一个表中的元素。 总之,pandas.concat函数是一个非常灵活和强大的工具,它能够方便地处理数据集的合并和连接操作,提供了多种参数和选项来满足不同的需求。使用这个函数可以轻松地将多个数据集合并成一个,为数据处理和分析提供了很大的便利性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值