数据合并

数据合并也就是说将多个数据集拼接在一起,但是合并的方式主要分为:pandas.merge,pandas.concat,df.join。以下,我们来详细的介绍。

df_l.join

df_l.join(df_r,how=”left”) 默认情况下是把行索引相同的数据合并到一起,以左边的矩阵为主。

  1. import numpy as np
  2. import pandas as pd
  3. df1 = pd.DataFrame(np.arange(12).reshape(3,4), index=list("ABC"), columns=list("DEFG"))
  4. df2 = pd.DataFrame(np.arange(6).reshape(2,3), index=list("AB"), columns=list("WXY"))
  5. df3 = pd.DataFrame(np.arange(6).reshape(2,3), index=list("CD"), columns=list("QRE"))
  6. """
  7. join 拼接
  8. 行索引公共的部分的值不会改变
  9. df1和df2谁在前面以谁为主, 所以df2较df1缺失的部分会补齐为NaN
  10. """
  11. df1.join(df2)
  12. """输出结果
  13. D E F G X Z Y
  14. A 0 1 2 3 0.0 1.0 2.0
  15. B 4 5 6 7 3.0 4.0 5.0
  16. C 8 9 10 11 NaN NaN NaN
  17. """
  18. """
  19. df2在左,以df2为主,所以多处的部分会直接去掉
  20. """
  21. df2.join(df1)
  22. """输出结果
  23. X Z Y D E F G
  24. A 0 1 2 0 1 2 3
  25. B 3 4 5 4 5 6 7
  26. """
  27. """
  28. 行索引不存在公共部分,以左边为主,df3全补齐为NaN
  29. """
  30. df2.join(df3)
  31. """输出结果
  32. X Z Y U I O
  33. A 0 1 2 NaN NaN NaN
  34. B 3 4 5 NaN NaN NaN
  35. """

**

pd.merge

pd.merge(df_l,df_r) 根据一个或多个键将行进行连接

  • how 指定拼接方式;inner,outer,left,right。默认是inner
  • on 需要连接的列名。注:必须是公共列
  • left_on 左边数组中用作连接的列
  • right_on 右边数组中用作连接的列 ```python “”” pd.merage() 这个与join最明显的区别是merage是根据列来拼接,因此如果没有公共的列就会报错 而join是通过行拼接 “”” df4 = pd.DataFrame(np.arange(6).reshape(2,3), index=list(“AB”), columns=list(“XZY”)) df5 = pd.DataFrame(np.arange(6).reshape(3,2), index=list(“ABC”), columns=list(“SX”)) print(df4) print(df5)

“””输出结果 X Z Y A 0 1 2 B 3 4 5

S X A 0 1 B 2 3 C 4 5 “””

“”” 默认以公共列拼接,当公共列有公共元素时,以公共元素直接拼接 “”” pd.merge(df4,df5)

“”” X Z Y S 0 3 4 5 2 “””

“”” 如果没有公共元素时,虽然不会报错,但是拼接后矩阵是空的 “”” df5.loc[“B”,”X”] = 6 # 将df5矩阵里的B行X列的值改为6, pd.merge(df4, df5)

“””输出结果 X Z Y S “””

“”” 公共列中有多个相同的元素,只要有公共元素的,都会拼接 “”” df5.loc[“A”:”B”, “X”] = [0,3] # 将df5矩阵的A~B行的X列的值改为0和3 pd.merge(df4,df5)

“””输出结果 X Z Y S 0 0 1 2 0 1 3 4 5 2 “””

“”” 改变拼接的方式 merge()默认是使用左连接,修改how参数可以改为右连接 “”” pd.merge(df4,df5, how=”right”)

“”” X Z Y S 0 1 NaN NaN 0 1 3 4.0 5.0 2 2 5 NaN NaN 4 “””

“”” on参数,指定拼接列 只能指定公共列,如果是非公共列会报错 “”” pd.merge(df4,df5, on=”X”) # on=并集,默认为None,也就是默认是交集

“””输出结果 X Z Y S 0 3 4 5 2 “””

“”” 指定两个非公共列进行拼接 left_on 左边数组中用作连接的列 right_on 右边数组中用作连接的列

“”” print(df4) print(df5) pd.merge(df4,df5, left_on=”Y”, right_on=”S”)

“””输出结果 X Z Y A 0 1 2 B 3 4 5

S X A 0 1 B 2 3 C 4 5

X_x Z Y S X_y 0 0 1 2 2 3 “””

  1. <a name="7o0DQ"></a>
  2. ####
  3. <a name="1Rmoe"></a>
  4. ### 数据分组与聚合
  5. 数据包含在Series、DataFrame数据结构中,可以根据一个或多个键分离到各个组中。分组操作之后,一个函数就可以应用到各个组中,产生新的值。如下图则是简单的分组聚合过程。
  6. ![image.png](https://cdn.nlark.com/yuque/0/2020/png/704747/1589452914097-39b00349-7d54-4eee-a038-9aa96287afb3.png#align=left&display=inline&height=353&margin=%5Bobject%20Object%5D&name=image.png&originHeight=390&originWidth=489&size=67156&status=done&style=none&width=443)<br />key为指定分组的列<br />**
  7. <a name="dAeQC"></a>
  8. #### df.groupby('key')
  9. ```python
  10. import pandas as pd
  11. import numpy as np
  12. data = {
  13. "key1":['a','a','b','b','a'],
  14. "key2":['one',"two","one","two","one"],
  15. "data1":np.arange(5),
  16. "data2":np.arange(5)
  17. }
  18. df = pd.DataFrame(data)
  19. k2_g = df.groupby("key2") # 只分组,并没有进行计算操作
  20. # for g in k2_g:
  21. # print(g)
  22. """
  23. 计算时,会自动将字符串的列过滤
  24. """
  25. k2_g.sum() # 求和运算
  26. """
  27. 根据key1标签计算data1的均值
  28. """
  29. k1_g = df["data1"].groupby(df["key1"])
  30. k1_g.mean()

pd.concat

pd.concat((df_l,df_r),axis=0) 使对象在轴向上进行黏合或”堆叠”

  1. df1 = pd.DataFrame(np.arange(12).reshape(3,4),index=list("ABC"),columns=list("QWER"))
  2. df2 = pd.DataFrame(np.arange(15).reshape(3,5),index=list("ABC"),columns=list("ZXCVB"))