pd.concat

参数

pd.concat(objs, axis=0, join=‘outer’, join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, copy=True)

objs

需要连接的对象eg [df1, df2]

axis

axis = 0, 表示在水平方向(row)进行连接 axis = 1, 表示在垂直方向(column)进行连接

join outer

表示index全部需要; inner,表示只取index重合的部分

join_axes

传入需要保留的index

ignore_index

忽略需要连接的frame本身的index。当原本的index没有特别意义的时候可以使用

keys

可以给每个需要连接的df一个label

import pandas as pd
""" 1、pd.concat:将多个 pandas 对象,按行索引或列索引进行连接 """
f = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
f
A B
0 1 2
1 3 4
f1 = pd.concat([f, pd.DataFrame({"A": 20, "B": 40}, index=[0])])
f1
A B
0 1 2
1 3 4
0 20 40
pd.concat([f1, pd.DataFrame([9], index=[0], columns=["A"])])
A B
0 1 2.0
1 3 4.0
0 20 40.0
0 9 NaN
"""
注意:如果连接的 pandas 对象中,有任意一个对象 用于连接的索引中存在重复值,将会报错。
	  除非是自己与自己连接
"""
pd.concat([f1, f1], axis=1)
A B A B
0 1 2 1 2
1 3 4 3 4
0 20 40 20 40
pd.concat([f1.reset_index(drop=True), pd.DataFrame([[9], [90]], index=[0, 1])], axis=1)
A B 0
0 1 2 9.0
1 3 4 90.0
2 20 40 NaN
f1
A B
0 1 2
1 3 4
0 20 40
# 下面两种情况都会报错 ValueError: Shape of passed values is 。。。
# 因为 其中某一个对象用于连接的索引存在重复值
pd.concat([f1, pd.DataFrame([[9], [90]], index=[0, 1])], axis=1)  # ValueError: Shape of passed values is (5, 3), indices imply (3, 3);f1的索引重复
pd.concat([f1.reset_index(drop=True), pd.DataFrame([[9], [90]], index=[0, 0])], axis=1)  # ValueError: Shape of passed values is (6, 3), indices imply (4, 3);第二个对象的索引重复
""" 2、对 ignore_index 的理解 """
f = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB'))
f
A B
0 1 2
1 3 4
# ignore_index=True:在按索引进行连接后,将结果对象的索引进行重置
pd.concat([f, pd.Series(20, index=[1])], axis=1)
A B 0
0 1 2 NaN
1 3 4 20.0
pd.concat([f, pd.Series(20, index=[1])], axis=1, ignore_index=True)
0 1 2
0 1 2 NaN
1 3 4 20.0

你可能感兴趣的:(python,python)