摘自《利用Python进行数据分析》——Wes Mckinney
合并数据集
数据库风格的DataFrame合并
pandas.merge
1可根据一个或多个键将两个不同DataFrame中的行连接起来。
In [174]: df1
Out[174]:
data1 key
0 0 b
1 1 b
2 2 a
3 3 c
4 4 a
5 5 b
In [175]: df2
Out[175]:
data2 key
0 0 a
1 1 b
2 2 a
3 3 b
4 4 d
In [176]: pd.merge(df1, df2, on='key', how='left')
Out[176]:
data1 key data2
0 0 b 1.0
1 0 b 3.0
2 1 b 1.0
3 1 b 3.0
4 2 a 0.0
5 2 a 2.0
6 3 c NaN
7 4 a 0.0
8 4 a 2.0
9 5 b 1.0
10 5 b 3.0
merge函数的参数:
参数 | 说明 |
---|---|
left | 参与合并的左侧DataFrame |
right | 参与合并的右侧DataFrame |
how | “inner”, “outer”, “left”, “right”默认为”inner” |
on | 用于连接的列名。必须存在于左右两个DataFrame对象中。如果未制定,且其他连接键也未指定,则以left和right列名的交集作为连接键 |
left_on | 左侧DataFrame中用作连接键的列,left_on 和right_on 加在一块完成on 的功能 |
right_on | 右侧DataFrame中用作连接键的列 |
left_index | 将左侧的行索引用作其连接键,数据类型boolean |
right_index | 类似于上,当想通过两个dataframe的索引来合并的时候,需启用right_on=True &left_on=True |
sort | 根据连接键对合并后的数据进行排序,默认为True。有时在处理大数据集时,禁用该选项可获得更好的性能 |
suffixes | 字符串元祖,用于追加到重叠列名的末尾,默认为(‘_x, _y’)。例如,如果左右两个DataFrame对象都有“data”,则结果中就会出现”data_x”和“data_y” |
copy | 设置为False,可以再抹些特殊情况下避免将数据复制到结果数据结构中。默认总是复制 |
索引上的合并
DataFrame还有一个join
实例方法,它能更为方便地实现按索引合并。它还可用于合并多个带有相同或相似索引的DataFrame对象,而不管它们之间有没有重叠的列。
轴向连接
Numpy有一个用于合并原始数组的concatenation
函数:
In [4]: arr
Out[4]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
In [5]: np.concatenate([arr, arr], axis=1)
Out[5]:
array([[ 0, 1, 2, 3, 0, 1, 2, 3],
[ 4, 5, 6, 7, 4, 5, 6, 7],
[ 8, 9, 10, 11, 8, 9, 10, 11]])
In [6]: np.concatenate([arr, arr], axis=0)
Out[