python Dataframe 合并与去重详情
作者:Coderusher??????? 发布时间:2022-08-17 02:18:54
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
来源:https://blog.51cto.com/coderusher/5554275
猜你喜欢
- 说起来惭愧,总是犯一些小错误,纠结半天,这不应为一个分号的玩意折腾了好半天! 错误时在执行SQL语句的时候发出的,信息如下: Java代码
- 一、matplotlib库1、基本绘图命令import matplotlib.pyplot as pltplt.figure(figsize
- 使用requests下载文件1、获取token,或者session如不需要可忽略login_url = "http://xxxx/
- Random库主要包含返回随机数的函数,主要用于普通的随机数生成的程序,如果对随机性有特殊要求,比如加密等,可以用函数os.urandom(
- 目录一、背景二、自动化的方案三、思路和知识点四、操作步骤4.1 初识 PyAutoGUI4.2 坐标系4.3 点击4.4 输入4.5 汉字输
- Fuko Masked 是 Kaloyan Tsvetkov 的一个小型PHP库,用于通过用编辑后的元素替换列入黑名单的元素来屏蔽敏感数据。
- 微信小程序一出,立马炸开了锅,都去搭建自己的开发环境,我这里也来尝尝先,之前发了一篇文章,有人问Demo怎么导入?Demo源代码(来自网络)
- *args和 **kwargs是常用的两个参数*args:用于接受多余的未命名的参数,元组类型。**kwargs:用于接受形参的命名参数,字
- python库-密码学库pynacl什么是pynacl官方: https://pynacl.readthedocs.io/en/latest
- 前言最近已经播完第一季的电视剧《雪中悍刀行》,从播放量就可以看出观众对于这部剧的期待,总播放量达到50亿,可让人遗憾的是,豆瓣评分只有5.7
- 一般来说,使用线程有两种模式, 一种是创建线程要执行的函数, 把这个函数传递进Thread对象里,让它来执行. 另一种是直接从Thread继
- 今天呱呱发了一个网址给我看,大概效果就是类似幻灯片的效果。当时我的第一反映这个是不是用锚点做的啊呢,以前在网上看过用锚点做的这类的效果。脑袋
- 最近很多小伙伴在尝鲜chatGPT,使用中遇到网站的1020的错误码,博主也遇到了相似的问题,不同的人运行环境不一样,可能解决方案不一样,接
- 在数据库中有时我们可能需要对一些数据进行处理,例如四舍五入、直接舍去后面的几位等,其实很简单,都是有现成的函数,我们只需要套用就行了:sel
- python使用qq邮箱(个人邮箱)发送邮件需开启qq邮箱的SMTP服务在设置中开启pop3/SMTP服务,返回的密码就是之后代码中登录使用
- 今天我们来写一个有管理功能的留言板程序。所谓的管理功能,其实就是每条留言前有一个选择框,点中要删除的留言,或者点“删除所有留言”,就完成了批
- 本文实例为大家分享了python实现日历效果的具体代码,供大家参考,具体内容如下一、代码编程过程1、根据年月日算出星期几def get_we
- 本文推荐一款twitter做的bootstrapValidator.js,本身bootstrap就是twitter做的,那么使用原配的val
- 在广大网友心目中,他们就是中国互联网搜索领域的三驾马车。无论这三家搜索巨头承不承认,在网友眼中总会来将他们进行对比比较。当然,更多时候的比较
- 前言在我们对DataFrame对象进行处理时候,下意识的会想到对DataFrame进行遍历,然后将处理后的值再填入DataFrame中,这样