目录
  • 1.合并
    • 1.1 结构合并
      • 1.1.1 concat函数
      • 1.1.2 append函数
    • 1.2 字段合并
    • 2.去重

      1.合并

      1.1 结构合并

      将两个结构相同的数据合并

      1.1.1 concat函数

      函数配置:

      concat([dataFrame1, dataFrame2,…], index_ingore=False)

      参数说明:index_ingore=False(表示合并的索引不延续),index_ingore=True(表示合并的索引可延续)

      实例:

      import pandas as pd
      import numpy as np
      
      # 创建一个十行两列的二维数据
      df = pd.DataFrame(np.random.randint(0, 10, (3, 2)), columns=['A', 'B'])
      
      # 将数据拆分成两份,并保存在列表中
      data_list = [df[0:2], df[3:]]
      
      # 索引值不延续 
      df1 = pd.concat(data_list, ignore_index=False)
      
      # 索引值延续
      df2 = pd.concat(data_list, ignore_index=True)

      返回结果:

      —————-df————————–
         A  B
      0  7  8
      1  7  3
      2  5  9
      3  4  0
      4  1  8
      —————-df1————————–
         A  B
      0  7  8
      1  7  3
      3  4  0# ————–>这里并没有2出现,索引不连续
      4  1  8
      —————-df2————————–
         A  B
      0  7  8
      1  7  3
      2  4  0
      3  1  8

      1.1.2 append函数

      函数配置:

      df.append(df1, index_ignore=True) 

      参数说明:index_ingore=False(表示索引不延续),index_ingore=True(表示索引延续)

      实例:

      import pandas as pd
      import numpy as np
      
      # 创建一个五行两列的二维数组
      df = pd.DataFrame(np.random.randint(0, 10, (5, 2)), columns=['A', 'B'])
      
      # 创建要追加的数据
      narry = np.random.randint(0, 10, (3, 2))
      data_list = pd.DataFrame(narry, columns=['A', 'B'])
      
      # 合并数据
      df1 = df.append(data_list, ignore_index=True)

      返回结果:

      —————-df————————–
         A  B
      0  5  6
      1  1  2
      2  5  3
      3  1  8
      4  1  2
      —————-df1————————–
         A  B
      0  5  6
      1  1  2
      2  5  3
      3  1  8
      4  1  2
      5  8  1
      6  3  5
      7  1  1

      1.2 字段合并

      将同一个数据不同列合并

      参数配置:

      pd.merge( left, right, how="inner", on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=("_x", "_y"), copy=True, indicator=False, validate=None, )

      参数说明:

      参数 说明
      how 连接方式:inner、left、right、outer,默认为 inner
      on 用于连接的列名
      left_on 左表用于连接的列名
      right_on 右表用于连接的列名
      Left_index 是否使用左表的行索引作为连接键,默认为False
      Right_index 是否使用右表的行索引作为连接键,默认为False
      sort 默认为False,将合并的数据进行排序
      copy 默认为True。总是将数据复制到数据结构中,设置为False可以提高性能
      suffixes 存在相同列名时在列名后面添加的后缀,默认为(’_x’, ‘_y’)
      indicator 显示合并数据中数据来自哪个表

      实例1:

      import pandas as pd
       
      df1 = pd.DataFrame({'key':['a','b','c'], 'data1':range(3)})
      df2 = pd.DataFrame({'key':['a','b','c'], 'data2':range(3)})
      df = pd.merge(df1, df2) # 合并时默认以重复列并作为合并依据

      结果展示:

      —————-df1————————–
        key  data1
      0   a      0
      1   b      1
      2   c      2
      —————-df2————————–
        key  data2
      0   a      0
      1   b      1
      2   c      2
      —————-df—————————
        key  data1  data2
      0   a      0      0
      1   b      1      1
      2   c      2      2

      实例2:

      # 多键连接时将连接键组成列表传入
       
      right=DataFrame({'key1':['foo','foo','bar','bar'],  
               'key2':['one','one','one','two'],  
               'lval':[4,5,6,7]})  
       
      left=DataFrame({'key1':['foo','foo','bar'],  
               'key2':['one','two','one'],  
               'lval':[1,2,3]})  
        
      pd.merge(left,right,on=['key1','key2'],how='outer')

      结果展示:

      —————-right————————-
        key1 key2  lval
      0  foo  one     4
      1  foo  one     5
      2  bar  one     6
      3  bar  two     7
      —————-left————————–
        key1 key2  lval
      0  foo  one     1
      1  foo  two     2
      2  bar  one     3
      —————-df—————————
        key1 key2  lval_x  lval_y
      0  foo  one     1.0     4.0
      1  foo  one     1.0     5.0
      2  foo  two     2.0     NaN
      3  bar  one     3.0     6.0
      4  bar  two     NaN     7.0
       

      2.去重

      参数配置:

      data.drop_duplicates(subset=['A','B'],keep='first',inplace=True)

      参数说明:

      参数 说明
      subset 列名,可选,默认为None
      keep {‘first’, ‘last’, False}, 默认值 ‘first’
      first 保留第一次出现的重复行,删除后面的重复行
      last 删除重复项,除了最后一次出现
      False 删除所有重复项
      inplace 布尔值,默认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。(inplace=True表示直接在原来的DataFrame上删除重复项,而默认值False表示生成一个副本。)

      实例:

      去除完全重复的行数据

      data.drop_duplicates(inplace=True)

      df = pd.DataFrame({
          'brand': ['Yum Yum', 'Yum Yum', 'Indomie', 'Indomie', 'Indomie'],
          'style': ['cup', 'cup', 'cup', 'pack', 'pack'],
          'rating': [4, 4, 3.5, 15, 5]
      })
      
      df.drop_duplicates()

      结果展示:

      —————去重前的df—————————
      brand style rating
      0 Yum Yum cup 4.0
      1 Yum Yum cup 4.0
      2 Indomie cup 3.5
      3 Indomie pack 15.0
      4 Indomie pack 5.0
      —————去重后的df—————————
      brand style rating
      0 Yum Yum cup 4.0
      2 Indomie cup 3.5
      3 Indomie pack 15.0
      4 Indomie pack 5.0

      使用subset 去除某几列重复的行数据

      data.drop_duplicates(subset=[‘A’,‘B’],keep=‘first’,inplace=True)

      df.drop_duplicates(subset=['brand'])

      结果展示:

      brand style rating
      0 Yum Yum cup 4.0
      2 Indomie cup 3.5

      使用 keep删除重复项并保留最后一次出现

      df.drop_duplicates(subset=['brand', 'style'], keep='last') 

      结果展示:

      brand style rating
      1 Yum Yum cup 4.0
      2 Indomie cup 3.5
      4 Indomie pack 5.0

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。