pandas---删除重复行、映射、异常值检测与过滤、抽样

这篇具有很好参考价值的文章主要介绍了pandas---删除重复行、映射、异常值检测与过滤、抽样。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 删除重复行

使用duplicated()函数检测重复的行。

返回布尔类型的Series对象,每个元素对应一行,如果该行不是第一次出现,则元素为True。

def make_df(indexs, columns):    
    data = [[str(j)+str(i) for j in columns] for i in indexs]
    df = pd.DataFrame(data=data, index=indexs, columns=columns)
    return df
df = make_df([1, 2, 3, 4], list('ABCD'))
df

# 让第一行和第二行重复
df.loc[1] = df.loc[2]
df

# 判断是否和前面的行重复了
df.duplicated()
df.duplicated(keep='first')  # 保留第一行
df.duplicated(keep='last')  # 保留最后一行
df.duplicated(keep=False)  # 标记所有重复行,不保留任何一行

pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

df.loc[1, 'D'] = 'DDD'
df

# subset: 子集
df.duplicated(subset=['A','B','C'])

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

 使用drop_duplicates()函数删除重复的行:

print(df.drop_duplicates())
df.drop_duplicates(subset=['A', 'B', 'C'])
df.drop_duplicates(subset=['A', 'B', 'C'], keep='last')

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

2. 映射

映射的含义:创建一个映射关系列表,把values元素和一个特定的标签或者字符串绑定。

replace()函数:替换元素

index = ['张三', '张三丰', '李白', '杜甫']
columns = ['Python', 'Java', 'H5', "UI"]
data = np.random.randint(0, 100, size=(4, 4))
df = pd.DataFrame(data=data, index=index, columns=columns)
df

# 替换元素
df.replace({5: 50, 1: 100})

pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

map()函数:新建一列,map()函数中可以使用lambda函数,适合处理某一单独的列

df2 = df.copy()
df2

# map一般用在Series数据结构,不能用于DataFrame
# df2['Python'].map({16: 160, 12: 120, 17: 170, 60:600})
# 将Python的每个人的成绩乘以10
df2['Python'].map(lambda x : x * 10)
# 新增一列
df2['Pandas'] = df2['Python'].map(lambda x : x * 10)
df2

pandas---删除重复行、映射、异常值检测与过滤、抽样 pandas---删除重复行、映射、异常值检测与过滤、抽样

# 新增一列:判断Java的成绩是否及格
df2['Java是否及格'] = df2['Java'].map(lambda n: '及格'  if n>=60 else '不及格')
df2

# 使用普通函数
# 新增一列: 判断UI成绩
#  <60  不及格
#  60<=n <80 及格
#  >=80 优秀
def fn(n):
    if n < 60:
        return '不及格'
    elif n < 80:
        return '及格'
    return '优秀'
df2['UI等级'] = df2['UI'].map(fn)
df2

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

rename()函数:替换索引。

df3.rename({'张三': 'Mr Zhang'})  # 默认修改行索引名
df3.rename({'Python': '派森'}, axis=1)  # 修改列索引名
df3.rename(index={'张三': 'Mr Zhang'}) # 修改行索引名
df3.rename(columns={'Python': '派森'}) # 修改列索引名

# 重置索引
df3.reset_index()

# 设置行索引
df3.set_index(keys=['H5'])

pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

apply()函数:既支持 Series,也支持 DataFrame

df = pd.DataFrame(data=np.random.randint(0, 10, size=(5, 3)),
                              index=list('ABCDE'),
                              columns=['Python', 'NumPy', 'Pandas']
                 )
df
# 用于Series, 其中x表式的Series中元素
df['Python'].apply(lambda x:  True if x>5 else False)
# 用于DataFrame, 其中x是DataFrame中某列或某行的Series数据
df.apply(lambda x : x.mean(), axis=0)  # 求每一列数据的平均值
df.apply(lambda x : x.mean(), axis=1)  # 求每一行数据的平均值

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

# 自定义方法
def fn2(x):
    return  (np.round(x.mean(), 1), x.count())  # 平均值,计数
df.apply(fn2, axis=1)

# applymap: DataFrame专有的方法,其中的x是每个元素
df.applymap(lambda x : x + 100) 

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

transform()函数

df = pd.DataFrame(data=np.random.randint(0, 10, size=(5, 3)),
                              index=list('ABCDE'),
                              columns=['Python', 'NumPy', 'Pandas']
                 )
df
# Series中使用transform
# 可以执行多项计算
df['Python'].transform([np.sqrt, np.exp])

# DataFrame中使用transform
def convert(x):
    if x.mean() > 5:
        return x * 10
    return x * (-10)   
df.transform(convert)  # 处理每一列
df.transform(convert, axis=1)  # 处理每一行

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

3. 异常值检测和过滤 

describe():查看每一列的描述性统计量

df.std():可以求得DataFrame对象每一列的标准差

df.drop():删除特定索引

unique():唯一,去重,DataFrame没有unique,Series调用unique。

df.query:按条件查询

df2.drop('A')  # 默认删除行
df2.drop('Python', axis=1)  # 删除列
df2.drop(index='A')  # 删除行
df2.drop(columns='Python')  # 删除列
# 删除多列或多行
df2.drop(columns=['NumPy', 'Python'])
df2.drop(index=['A', 'B'], inplace=True)

df['Python'].unique()
# ==, >, <
# and, &
#  or , | 
# in 
df.query('Python == 9')  # 找到Python列中等于9的所有行
df.query('Python < 8') 
df.query('Python>6 and NumPy==2')
df.query('Python>6 & NumPy==2')
df.query('Python==3 or NumPy==2')
df.query('Python==3 | NumPy==2')
df.query('Python in [3, 4, 5, 6]')  # 成员运算符
# 使用变量
n = 7
df.query('Python == @n')  # @n 表式使用变量n的值
m =  [3, 4, 5, 6]
df.query('Python in @m')  # 成员运算符

df.sort_values(): 根据值排序;

df.sort_index(): 根据索引排序。

#  sort_values : 默认按照列名排序,默认升序  (常用)
df.sort_values('Python')  
# ascending: 是否升序,默认是True
df.sort_values('Python', ascending=False)  # 降序

# 根据行索引名排序,会把列进行排序(不常用)
df.sort_values('B', axis=1)
# 按照索引名排序 (不常用)
# 默认是对行索引进行排序,默认是升序
df.sort_index(ascending=False)
# 按照列索引排序
df.sort_index(ascending=False, axis=1)

pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

df.info(): 查看数据信息

df.info()

pandas---删除重复行、映射、异常值检测与过滤、抽样

4. 抽样 

使用.take()函数排序;可以借助np.random.permutation()函数随机排序。

df2.take([1, 0, 2])  # 行排列
df2.take([1, 0, 2], axis=1)  # 列排列

# 随机排列
np.random.permutation([0, 1, 2])

# 无放回抽样: 依次随机取出,没有重复值
df2.take(np.random.permutation([0, 1, 2]))

 pandas---删除重复行、映射、异常值检测与过滤、抽样pandas---删除重复行、映射、异常值检测与过滤、抽样

# 有放回抽样: 可能会出现重复值

np.random.randint(0, 3, size=5)

df2.take(np.random.randint(0, 3, size=5))

pandas---删除重复行、映射、异常值检测与过滤、抽样

 文章来源地址https://www.toymoban.com/news/detail-485938.html

 

 

 

 

 

 

 

 

 

 

 

 

到了这里,关于pandas---删除重复行、映射、异常值检测与过滤、抽样的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pandas 识别最大值并去除重复项

    碰见一个七千多万行的数据,结构是这样的 id a b c d 2333 2 3 4 5 233 3 3 4 5 12333 1 3 3 5 12333 1 3 4 5 第1列是标识,a,b,c,d是记录的数值,标识里面会有重复的,目的是想要找到唯一id,并且后面数值加起来最大的那一行。 开始直接做了 df[\\\'id\\\'].value_counts().index ,然后遍历里面id,再匹配

    2024年02月07日
    浏览(41)
  • [MFC]过滤数组中重复的数据

    之前在帮客户开发一个自动读取物理网卡地址功能的时候,获取到的网卡地址偶尔会出现重复,如下图,无论是单张网卡还是多张网卡都存在这个问题。由于我获取的网卡地址是存放于CStringArray中,所以我得对其中的数据进行去重才能正常地显示网卡地址。  为此,我在网上

    2024年02月05日
    浏览(34)
  • 【RocketMQ】RocketMQ标签、过滤及消息重复消费

    参考文档: 官方文档 Topic 与 Tag 都是业务上用来归类的标识,区别在于 Topic 是一级分类,而 Tag 可以理解为是二级分类。使用 Tag 可以实现对 Topic 中的消息进行过滤。 注: Topic:消息主题,通过 Topic 对不同的业务消息进行分类。 Tag:消息标签,用来进一步区分某个 Topic 下

    2024年02月07日
    浏览(47)
  • Pandas实战100例 | 案例 50: 分组后的过滤

    案例 50: 分组后的过滤 知识点讲解 在 Pandas 中,你可以对分组后的数据进行过滤,根据每个组的特性选择或排除特定的组。这通常通过 groupby 结合 filter 方法实现。 分组后的过滤 : 使用 filter 方法,可以根据分组的属性(如组内均值、最大值等)决定是否保留整个组。 示例代

    2024年01月15日
    浏览(39)
  • python中pandas如何过滤输出【以下为ChatGPT编写】

    在 Python 中使用 Pandas 库进行数据分析时,你可以使用条件过滤来筛选和过滤输出。Pandas 提供了多种方法来实现数据的过滤和筛选操作,(ChatGPT编写)以下是一些常用的方式: 1. 使用布尔索引:    ```python    import pandas as pd        # 创建一个示例DataFrame    data = {\\\'Name\\\': [\\\'Ali

    2024年02月09日
    浏览(59)
  • 异常过滤器—MVC中异常过滤器使用

    异常过滤器( Exception Filters )是 ASP.NET Core 中用于处理全局异常的机制。它们允许你在发生异常时捕获、处理和记录异常,并提供自定义的异常处理逻辑。异常过滤器在整个应用程序范围内生效,可以用于处理各种异常情况。用于实现常见的错误处理策略,没有之前和之后事

    2024年02月13日
    浏览(53)
  • 软件测试|MySQL DISTINCT关键字过滤重复数据

    简介 在MySQL中,有时候我们需要从表中检索唯一的、不重复的数据。这时,我们可以使用 DISTINCT 来过滤掉重复的数据行。在本文中,我们将深入探讨MySQL中 DISTINCT 的用法以及如何在查询中使用它来得到不重复的结果集。 基本语法 DISTINCT 用于在 SELECT 语句中指示

    2024年02月02日
    浏览(43)
  • chatgpt赋能python:Python异常过滤教程:如何正确处理和过滤Python中的异常

    Python是一种非常流行的编程语言,广泛应用于各种应用程序和领域中。在我们编写Python程序的过程中,通常要处理各种异常情况,比如用户输入错误,文件读取错误等等。正确处理和过滤这些异常情况是保证我们的程序能够正常运行的关键。 在本文中,我们将介绍如何正确处

    2024年02月09日
    浏览(47)
  • 异常数据过滤算法MATLAB

    (1)莱茵达准则 莱因达准则又称3sigma准则:本方法适合样本数据服从正态分布,且样本量不小于8。根据莱因达准则,当观测数据服从正态分布时,残差落在3倍标准差[-3,3]的概率超过99. 7%,落在此区域外的概率不超过0. 3%。因此,可以认为残差落于该区域外的测量数据为异常值

    2024年02月13日
    浏览(28)
  • 【100天精通Python】Day59:Python 数据分析_Pandas高级功能-多层索引创建访问切片和重塑操作,pandas自定义函数和映射功能

    目录 1 多层索引(MultiIndex) 1.1 创建多层索引 1.1.1 从元组创建多层索引

    2024年02月09日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包