• Pandas - 数据合并


            DataFrame数据合并主要使用merge()方法和concat()方法。

    1.数据合并(merge()方法)

            Pandas模块的merge()进行数据合并时,两个DataFrame对象必须有相同的列。

            1.常规合并

    1. import pandas as pd
    2. df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    3. '语文':[110,105,109],
    4. '数学':[105,88,120],
    5. '英语':[99,115,130]})
    6. df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    7. '体育':[34.5,39.7,38]})
    8. df_merge=pd.merge(df1,df2,on='编号')
    9. print(df_merge)

            该示例中,编号是相同的,所以会将df2中“体育”作为新的一列加入到df1中。 

            2.通过索引合并

    1. import pandas as pd
    2. df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    3. '语文':[110,105,109],
    4. '数学':[105,88,120],
    5. '英语':[99,115,130]})
    6. df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    7. '体育':[34.5,39.7,38]})
    8. df_merge=pd.merge(df1,df2,left_index=True,right_index=True)
    9. print(df_merge)

            3.对合并数据去重 

             使用到how属性,就是让df1保留所有的行列数据,df2则根据df1的行列进行补全。

    1. import pandas as pd
    2. df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    3. '语文':[110,105,109],
    4. '数学':[105,88,120],
    5. '英语':[99,115,130]})
    6. df2 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    7. '体育':[34.5,39.7,38]})
    8. df_merge=pd.merge(df1,df2,on='编号',left_index=True,right_index=True)
    9. print(df_merge)
    10. df_merge=pd.merge(df1,df2,on='编号',how='left')
    11. print(df_merge)

            4.多对一的数据合并

            根据共有列中的数据进行合并,df2根据df1的行列进行补全。

    1. import pandas as pd
    2. df1 = pd.DataFrame({'编号':['mr001','mr002','mr003'],
    3. '学生姓名':['明日同学','高猿员','钱多多']})
    4. df2 = pd.DataFrame({'编号':['mr001','mr001','mr003'],
    5. '语文':[110,105,109],
    6. '数学':[105,88,120],
    7. '英语':[99,115,130],
    8. '时间':['1月','2月','1月']})
    9. df_merge=pd.merge(df1,df2,on='编号')
    10. print(df_merge)

            5.多对多的数据合并

            根据共有列中的数据进行合并,df2,df1相互补全。

    1. import pandas as pd
    2. df1 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr001','mr001'],
    3. '体育':[34.5,39.7,38,33,35]})
    4. df2 = pd.DataFrame({'编号':['mr001','mr002','mr003','mr003','mr003'],
    5. '语文':[110,105,109,110,108],
    6. '数学':[105,88,120,123,119],
    7. '英语':[99,115,130,109,128]})
    8. df_merge=pd.merge(df1,df2)
    9. print(df_merge)

    2.数据合并(concat()方法)

            1.相同字段的表首尾相连

    1. dfs = [df1,df2,df3]
    2. result = pd.concat(dfs)

            如果需要标记源数据来自于哪张表,可以使用:

            result = pd.concat(dfs, keys=['第一张表','第二张表','第三张表']) 

            2.横向表合并(行对齐)

            用于数据列名不一致,缺失的数据使用Nan填充 。其中axis=1代表行合并。

    result = pd.concat([df1,df4],axis=1)

            3.交叉合并

            交叉合并需要加上join参数,如值为inner,结果为两张表的交集;如果值为outer,结果为两张表的并集。 

    result = pd.concat([df1,df4],axis=1,join='inner')

            4.指定表对其数据(行对齐)

             如果指定参数join_axes,就可以指定根据哪张表来对齐数据。如下述代码,根据df4表对其,结果表的行术和df4的行术一致,在此基础上拼接df1表。

    result = pd.concat([df1,df4],axis=1,join_axes[df4.index])

             ​​​​​​​

    《python数据分析》p120

  • 相关阅读:
    Docker从认识到实践再到底层原理(八)|Docker网络
    springboot集成Redis
    C++ Reference: Standard C++ Library reference: Containers: deque: deque: back
    Linux设置静态IP地址
    【JavaWeb】阿里的德鲁伊和c3p0
    JavaWeb基础篇笔记(1)
    从零开始写 Docker(七)---实现 mydocker commit 打包容器成镜像
    第五章 目标检测中K-means聚类生成Anchor box(工具)
    Vue路由守卫
    BAT031:按列表名单将路径a下的文件夹批量剪切到路径b
  • 原文地址:https://blog.csdn.net/m0_56190554/article/details/134294962