1. 问题
数据连接是数据处理中经常需要用到的操作。Python 常见的数据类型,都应该怎样进行连接呢?
2. 分析
2.1. list
list 的连接是最容易的,直接用 Python 语法即可。
a = [1, 2, 3]
b = [4, 5, 6]
c = a + b
print(c)
d = [a, b]
print(d)
输出结果
[1, 2, 3, 4, 5, 6]
[[1, 2, 3], [4, 5, 6]]
2.2. dict
dict 不支持 +。想要合并两个dict,需要用到**操作符。
a = {'a': 1, 'b':2, 'c': 3}
b = {'d': 4, 'e':5, 'f': 6}
c = {**a, **b}
print(c)
输出结果
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
如果b里面有a的键值,后面的值会覆盖掉前面的值。
a = {'a': 1, 'b':2, 'c': 3}
b = {'a': 4, 'e':5, 'f': 6}
c = {**a, **b}
print(c)
输出结果
{'a': 4, 'b': 2, 'c': 3, 'e': 5, 'f': 6}
2.3. set
set 不可 hashable,而且不支持+,所以需要另想办法。
a = set([1, 2, 3])
b = set([1, 5, 6])
c = a.union(b)
print(c)
d = {item for item in list(a) + list(b)}
print(d)
比如用它的union方法,或者用iterate特性,都可以得出相同的结果
{1, 2, 3, 5, 6}
{1, 2, 3, 5, 6}
2.4. ndarray
ndarray 合并的时候,需要注意坐标轴方向和相应方向大小是否吻合。比如
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9], [10, 11, 12]])
c = np.concatenate((a, b))
print(c)
d = np.concatenate((a, b), axis=1)
print(d)
输出结果
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
或者
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([[7, 8, 9]])
c = np.concatenate((a, b))
print(c)
d = np.array([[7, 8]]).transpose()
e = np.concatenate((a, d), axis=1)
print(e)
输出结果
[[1 2 3]
[4 5 6]
[7 8 9]]
[[1 2 3 7]
[4 5 6 8]]
如果是一个 vector 和一个 ndarray 想合并,可以给 vector 增加一个维度
a = np.array([[1, 2, 3], [4, 5, 6]])
b = np.array([7, 8])
c = b[:, np.newaxis]
d = np.concatenate((a, c), axis=1)
print(d)
输出结果
array([[1, 2, 3, 7],
[4, 5, 6, 8]])
2.5. DataFrame
DataFrame 比较灵活,可以在各个维度上进行扩展。所以连接的时候需要特别注意方向。
import pandas as pd
a = pd.DataFrame([[1, 2, 3], [4, 5, 6]], columns=['a', 'b', 'c'])
b = pd.DataFrame([[7, 8], [9, 10]], columns=['b', 'd'])
c = pd.concat([a, b], axis=0)
c
d = pd.concat([a, b], axis=1)
d
输出结果
abcd
01.023.0NaN
14.056.0NaN
0NaN7NaN8.0
1NaN9NaN10.0
abcbd
012378
1456910
3. 总结
今天我们大致总结了 Python 里面常见数据类型的合并方式。合并是最常见的数据操作之一,应该是熟练掌握的基本功之一。
4. 交流
独学而无友则孤陋寡闻。现有「数据与统计科学」微信交流群,内有数据行业资深从业人员、海外博士、硕士等,欢迎对数据科学、数据分析、机器学习、人工智能有兴趣的朋友加入,一起学习讨论。
大家可以扫描下面二维码,添加荔姐微信邀请加入,暗号:机器学习加群。
5. 扩展
5.1. 延伸阅读
5.2. 参考文献[1]M. Wes, Python for Data Analysis, 2nd. Beijing: O’Reilly, 2017.
[1]J. VanderPlas, Python Data Science Handbook. Beijing: O’Reilly, 2016.