合并数据是对数据集合的合,是基本操作之⼀,也是我们处理大量数据的核⼼操作,本章主要研究数据的合并操作。
# 准备数据
import numpy as np
import pandas as pd
def make_df(cols, ind):
'''⽣成⼀个简单的DataFrame数据'''
data = {
c:[str(c) + str(i) for i in ind] for c in cols}
return pd.DataFrame(data, ind)
# 测试函数
df = make_df("ABC", range(5))
print(df)
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
concat
通过pandas的concat能实现简单的数据合并。
pd.concat实现简单的Series和DataFrame的合并
# 简单的合并
s1 = pd.Series(list("ABC"), index =[1, 2, 3])
s2 = pd.Series(list("DEF"), index =[4, 5, 6])
s = pd.concat([s1, s2])
print("合并后: \n", s)
合并后:
1 A
2 B
3 C
4 D
5 E
6 F
dtype: object
DF合并
df1 = make_df("ABC", [1, 2, 3])
df2 = make_df("DEF", [4, 5, 6])
print("df1 = \n", df1)
print("\n df2 = \n", df2)
df1 =
A B C
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
df2 =
D E F
4 D4 E4 F4
5 D5 E5 F5
6 D6 E6 F6
对两个df进行合并
df3 = pd.concat([df1, df2])
print("\n df3 = \n", df3)
df3 =
A B C D E F
1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN
4 NaN NaN NaN D4 E4 F4
5 NaN NaN NaN D5 E5 F5
6 NaN NaN NaN D6 E6 F6
FutureWarning: Sorting because non-concatenation axis is not aligned. A future version
of pandas will change to not sort by default.
To accept the future behavior, pass 'sort=False'.
To retain the current behavior and silence the warning, pass 'sort=True'.
对于这种排序,因为非级联轴不对齐的情况,我们也会获得相应的警告
合并的时候同样可以指定axis
df4 = pd.concat([df1, df2], axis=1)
print("\n df4 = \n", df4)
df4 =
A B C D E F
1 A1 B1 C1 NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN
4 NaN NaN NaN D4 E4 F4
5 NaN NaN NaN D5 E5 F5
6 NaN NaN NaN D6 E6 F6
重复索引的处理
重复索引在合并过程中是默认保留的,DataFrame也允许重复索引值的出现,但会熬成混淆,我们对重复索引的处理主要包括:
- 捕捉异常, 需要设置参数 verify_integrity
- 或略,需要设置参数 ignore_index
- 增加多级索引, 需要设置参数 keys
# 准备数据
df1 = make_df("AB", [0,1])
df2 = make_df