如有错误欢迎指正~
在数据分析的过程中数据的重构是非常重要的,本篇文章将详细讲解pandas中四个重要的连接函数:concat(), merge(), join(), append()
import pandas as pd
import numpy as np
- 沿特定轴(axis)连接对象,也可以在连接轴上添加层级索引(index)
1. 参数详解
pd.concat(
objs,
axis=0,
join='outer',
ignore_index: bool = False,
keys=None,
levels=None,
names=None,
verify_integrity: bool = False,
sort: bool = False,
copy: bool = True,
)
2. 举例说明
首先建立三个数据集
df1 = pd.DataFrame([['a', 1], ['b', 2]], columns = ['letter', 'number'])
df2 = pd.DataFrame([['c', 3], ['d', 4]], columns = ['letter', 'number'])
df3 = pd.DataFrame([['c', 3, 'cat'], ['d', 4, 'dog']], columns = ['letter', 'number', 'animal'])
df1
letter number
0 a 1
1 b 2
df2
letter number
0 c 3
1 d 4
df3
letter number animal
0 c 3 cat
1 d 4 dog
将df1和df2按行连接,并构建多层次索引
pd.concat([df1, df2], keys = ['x', 'y'])
letter number
x 0 a 1
1 b 2
y 0 c 3
1 d 4
将df1和df3按行连接,默认为并集(联合)有额外的列值用NaN填充
pd.concat([df1, df3])
letter number animal
0 a 1 NaN
1 b 2 NaN
0 c 3 cat
1 d 4 dog
将df1和df3按行连接,并重构索引
pd.concat([df1, df3], ignore_index = True, join = 'inner')
letter number
0 a 1
1 b 2
2 c 3
3 d 4
若要按列连接添加 ‘axis = 1’;
总的来说,concat()函数自身可以实现按行按列连接,也可以添加多层次索引
- 按行合并
- 将添加的行追加到原数据的末尾,并返回一个新对象。
- 新添加的行新出现的列(原数据中没有的列)将作为新列添加。
1. 参数详解
append()中的参数较少,与concat()中参数有部分重合
df1.append(
other,
ignore_index=False,
verify_integrity=False,
sort=False
)
2. 举例说明
仍然用前面建立的三个数据集来举例
df1.append([df2,df3], ignore_index = True)
letter number animal
0 a 1 NaN
1 b 2 NaN
2 c 3 NaN
3 d 4 NaN
4 c 3 cat
5 d 4 dog
- 按列快速合并
- 通过传入一个列表,可以通过索引一次高效地连接多个数据对象
1. 参数详解
join()对连接的索引进行较为详细的划分
df.join(
other,
on=None,
how='left',
lsuffix='',
rsuffix='',
sort=False
)
2. 举例说明
df1.join(df2, lsuffix = '_1', rsuffix = '_2')
letter_1 number_1 letter_2 number_2
0 a 1 c 3
1 b 2 d 4
1. 参数详解
pd.merge(
left,
right,
how: str = 'inner',
on=None,
left_on=None,
right_on=None,
left_index: bool = False,
right_index: bool = False,
sort: bool = False,
suffixes=('_x', '_y'),
copy: bool = True,
indicator: bool = False,
) -> 'DataFrame'
2. 举例说明
pd.merge(left=df1, right=df3, left_index=True, right_index=True, suffixes=('_1', '_2'))
letter_1 number_1 letter_2 number_2 animal
0 a 1 c 3 cat
1 b 2 d 4 dog
pd.merge(left=df1, right=df2, how='cross')
letter_x number_x letter_y number_y
0 a 1 c 3
1 a 1 d 4
2 b 2 c 3
3 b 2 d 4
- concat 可以通过指定axis进行行列两个维度的连接
- append 相当于concat(axis=0),只能进行行连接
- join 相当于concat(axis=1),默认用index进行列合并
- merge 相当于concat(axis=1) ,通过指定一个key进行列合并
Original: https://blog.csdn.net/Hour__/article/details/118682204
Author: Hour__
Title: Pandas中的连接函数汇总
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/679735/
转载文章受原作者版权保护。转载请注明原作者出处!