大数据分析实践 | 过滤和抽样

文章目录

  • 📚相关函数
    • 🐇数据读取和写入:read_csv和to_csv
    • 🐇数据过滤:pandas.DataFrame.loc
    • 🐇抽样:pandas.DataFrame.sample
    • 🐇删除缺失数据:dropha
    • 🐇添加元素:append
    • 🐇groupby和匿名函数
  • 📚案例


python基础 | Pandas基础

📚相关函数

🐇数据读取和写入:read_csv和to_csv

pandas系列 read_csv 与 to_csv 方法各参数详解(全,中文版)
Pandas–read_csv,to_csv参数说明

  • read_csv:把CSV文件读取为一个DataFrame对象
    • filepath_or_buffer:要读取的CSV文件的路径或文件对象。
    • sep:指定用于分隔字段的字符,默认为逗号(,)。
    • header:指定作为列名的行号,默认为0,表示第一行。
    • index_col:指定作为索引的列号或列名,默认为None,即不使用任何列作为索引。
    • na_values:指定在CSV文件中应被解释为缺失值的值。
    • dtype:指定每列的数据类型,可以使用字典来分别指定每列的数据类型。
    • nrows:指定读取的行数。
    • skiprows:指定跳过的行数。
    • encoding:指定文件编码。
  • to_csv:将DataFrame对象写入到CSV文件中
    • path_or_buf:要写入的CSV文件的路径或文件对象。
    • sep:指定用于分隔字段的字符,默认为逗号(,)。
    • header:指定是否包含列名,默认为True。
    • index:指定是否包含行索引,默认为True。
    • mode:指定写入模式,默认为’w’,覆盖已存在的文件;若设为’a’,则追加数据到已存在的文件。
    • encoding:指定文件编码。

🐇数据过滤:pandas.DataFrame.loc

Pandas.DataFrame.loc函数用法大全

DataFrame.loc[row_indexer, column_indexer]:其中 ​row_indexer​和 ​column_indexer​可以是单个标签、标签列表、标签切片、布尔数组或可返回这些对象之一的可调用函数。

  • 通过标签选择特定行和列
    # 选择行为'Alice',列为'Age'和'City'
    df.loc['Alice', ['Age', 'City']]# 选择标签为'Alice'到'Charlie'的行,所有列
    df.loc['Alice':'Charlie', :]# 选择标签为'Alice'到'Charlie'的行,列为'Age'到'City'
    df.loc['Alice':'Charlie', 'Age':'City']
    
  • 使用布尔条件选择行和列
    # 选择年龄大于等于30的行,所有列
    df.loc[df['Age'] >= 30, :]# 选择年龄大于等于30的行,列为'Name'和'Age'
    df.loc[df['Age'] >= 30, ['Name', 'Age']]
    
  • 使用可调用函数选择行和列
    # 定义一个函数,选择名字长度大于5的行,所有列
    def name_length(row):return len(row['Name']) > 5df.loc[name_length, :]
    

🐇抽样:pandas.DataFrame.sample

【很详细的一篇博客!】Pandas数据清洗系列:DataFrame.sample方法详解

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

  • n:要抽样的行数。
  • frac:要抽样的行百分比。
  • replace:是否允许重复抽样,默认为False。
  • weights:每行的抽样权重,可以是一个列名或值的Series。
  • random_state:用于确定随机种子的整数或RandomState对象,以确保可重复的随机抽样。
  • axis:0表示抽样行,1表示抽样列。
# 从DataFrame中随机选择3行
df.sample(n=3)# 从DataFrame中随机选择20%的行
df.sample(frac=0.2)# 从DataFrame中选取3行,并允许重复抽样
df.sample(n=3, replace=True)# 为每行设置不同的抽样权重,并从DataFrame中随机选择1行
weights = pd.Series([0.1, 0.3, 0.6], index=df.index)
df.sample(n=1, weights=weights)

🐇删除缺失数据:dropha

Pandas删除缺失数据函数–dropna
DataFrame.dropna(axis=0, how='any', inplace=False)

  • ​​axis​:指定删除的轴,​axis=0​表示删除包含缺失值的行(默认),​axis=1​表示删除包含缺失值的列。
  • ​​ how​:指定删除的条件,默认为’any’,表示如果有任何一个元素为空,则删除该行或列;如果设置为’all’,则要求整行或整列都为空时才删除。
  • inplace​:指定是否在原地更改DataFrame,默认为 ​False​,表示创建一个新的DataFrame返回,不影响原始DataFrame。

🐇添加元素:append

Python 列表 append()函数使用详解

DataFrame.append(other, ignore_index=False, verify_integrity=False)

  • other​:要追加的对象,可以是DataFrame、Series、字典(由Series组成)等。
  • ignore_index​:是否忽略索引,默认为 ​False​。如果设置为 ​True​,则添加行时会生成新的连续整数索引。
  • ​verify_integrity​:是否验证DataFrame中的索引,并引发异常,默认为 ​False​。如果设置为 ​True​,并且追加操作会导致索引冲突,则会引发异常。

🐇groupby和匿名函数

python——当groupby遇到匿名函数
DataFrame.groupby(by=None, axis=0, level=None, as_index=True)

  • by​:指定用于分组的列或多个列,可以是列名、列标签列表或字典等。
  • axis​:指定分组的轴,默认为0,表示按行进行分组;设置为1则按列进行分组。
  • level​:对于具有多层级索引的数据,通过指定 ​level​可以按指定层级的索引进行分组,默认为 ​None​。
  • ​​as_index​:指定是否将分组的列作为新索引,默认为 ​True​,即将分组的列作为索引;设置为 ​False​则不进行该操作。

grouped_data = df.groupby('category')['price'].apply(lambda x: x.mean())

  • 首先使用 ​groupby(‘category’)​对DataFrame ​df​ 按’category’列进行分组。
  • 对分组后的每个组使用 ​apply()​函数,将匿名函数应用于’price’列上。
  • 用匿名函数 ​lambda x: x.mean()​计算每个组中’price’列的均值。
  • 最终,得到一个包含每个分类的平均价格的Series对象。

  • reset_index(drop=True, inplace=True)​是对DataFrame对象进行操作的一个方法。它的主要作用是重置索引并将索引设置为连续的整数,并可选择是否在原地更改DataFrame。

  • 由于某些操作(例如分组、筛选、采样等)可能会导致DataFrame的索引出现乱序或不连续的情况,​reset_index()​可以帮助我们重新构建索引,确保其按照连续的整数值排列。

  • 假设有以下DataFrame

       index   A    B
    0      0   1  4.0
    1      2   2  5.0
    2      3   3  6.0
    
  • 执行后为

       A    B
    0  1  4.0
    1  2  5.0
    2  3  6.0
    

📚案例

  • 过滤条件为:
    • from_level = “一般节点”
    • traffic !=0

  • 加权采样:to_level的值为一般节点与网络核心的权重之比为 1 : 5

  • 分层采样:根据to_level的值进行分层采样

  • 随机采样,以上各采样50条

    import pandas as pd# 读取数据集
    data = pd.read_csv('test.csv')# 删除空行(所有列均为空)
    data.dropna(how='all', inplace=True)# 数据过滤,只保留了'from_level'列值为"一般节点"且'traffic'列值不等于0的行
    filtered_df = data.loc[(data['from_level'] == "一般节点") & (data['traffic'] != 0)]
    filtered_df.to_csv('filtered_data.csv', index=False, encoding='utf-8')# 加权采样,一般节点被赋予1的权重,网络核心被赋予5的权重
    weighted_ratios = {'一般节点': 1, '网络核心': 5}
    sample_data = pd.DataFrame()
    for level, ratio in weighted_ratios.items():level_data = data[data['to_level'] == level]level_sample = level_data.sample(int(50 * ratio / sum(weighted_ratios.values())), random_state=42)sample_data = sample_data.append(level_sample)
    sample_data.to_csv('weighted_sample.csv', index=False, encoding='utf-8')# 分层采样,采样数量根据每个分组的数量与整个数据集的比例计算得出
    stratified_sample = data.groupby('to_level').apply(lambda x: x.sample(n=round(50*len(x)/len(data)), replace=False, random_state=42))
    stratified_sample.reset_index(drop=True, inplace=True)
    stratified_sample.to_csv('stratified_sample.csv', index=False, encoding='utf-8')# 随机采样
    random_sample = data.sample(n=50, replace=False, random_state=42)
    random_sample.to_csv('random_sample.csv', index=False, encoding='utf-8')
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/103829.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TensorFlow入门(十二、分布式训练)

1、按照并行方式来分 ①模型并行 假设我们有n张GPU,不同的GPU被输入相同的数据,运行同一个模型的不同部分。 在实际训练过程中,如果遇到模型非常庞大,一张GPU不够存储的情况,可以使用模型并行的分布式训练,把模型的不同部分交给不同的GPU负责。这种方式存在一定的弊端:①这种方…

sklearn处理离散变量的问题——以决策树为例

最近做项目遇到的数据集中,有许多高维类别特征。catboost是可以直接指定categorical_columns的【直接进行ordered TS编码】,但是XGboost和随机森林甚至决策树都没有这个接口。但是在学习决策树的时候(无论是ID3、C4.5还是CART)&am…

嵌入式养成计划-40----C++菱形继承--虚继承--多态--模板--异常

九十四、菱形继承 94.1 概念 菱形继承又称为钻石继承,是由公共基类派生出多个中间子类,又由中间子类共同派生出汇聚子类,汇聚子类会得到多份中间子类从公共基类继承下来的数据成员,会造成空间浪费,没有必要。 所以存…

工程师必须记住的电路元件符号及英语翻译

很多电子小白第一次接触印刷电路板(PCB)时,总会头痛那些密密麻麻的元件字母符号,这些电路元件符号基本上都是采用英语缩写,下面我们来看看这些电路元件的英语符号有哪些? 电阻器(Resistor&#…

C++入门指南:类和对象总结友元类笔记(下)

C入门指南:类和对象总结友元类笔记(下) 一、深度剖析构造函数1.1 构造函数体赋值1.2 初始化列表1.3 explicit关键字 二、static成员2.1 概念2.2 特性 三、友元3.1 友元函数3.2 友元类 四、 内部类4.1 概念4.2 特征 五、拷贝对象时的一些编译器优化六、深…

Linux进阶-加深进程印象

目录 进程 进程状态转换 进程状态 启动新进程 system()函数 system.c文件 Makefile文件 执行过程 fork()函数 函数原型 fork.c文件 Makefile文件 执行过程 exec系列函数 函数原型 execl.c文件 Makrfile文件 执行过程 终止进程 exit()函数和_exit()函数 头…

机器人制作开源方案 | 杠杆式6轮爬楼机器人

1. 功能描述 本文示例将实现R281b样机杠杆式6轮爬楼机器人爬楼梯的功能(注意:演示视频中为了增加轮胎的抓地力,在轮胎上贴了双面胶,请大家留意)。 2. 结构说明 杠杆式6轮爬楼机器人是一种专门用于爬升楼梯或不平坦地面…

【elasticsearch】elasticsearch8.0.1使用rpm包安装并启用TLS

背景 公司的业务需要在加密的情况下使用,为此,研究测试了一下es8是如何启用TLS的。以下是测试使用过程。 x-pack了解 在 Elasticsearch 7.11.0 版本及更高版本中,X-Pack 功能在默认情况下已经整合到 Elastic Stack 的各个组件中&#xff0…

Element-UI的使用——表格el-table组件去除边框、滚动条设置、隔行变色、去除鼠标悬停变色效果(基于less)

// Element-ui table表格去掉所有边框,如下: // 备注:若去掉所有边框,可自行将头部边框注释掉即可 // 该样式写在style scoped外面在el-table 中添加class"customer-table"类名 //去掉每行的下边框/deep/ .el-table td.el-table__c…

LCR 161.连续天数最高销售额

​​题目来源: leetcode题目,网址:LCR 161. 连续天数的最高销售额 - 力扣(LeetCode) 解题思路: 动态规划。对于第 i 个元素 sales[i],若以第 i-1 个元素 sales[i-1] 为结尾的最大连续和 f(n-2)…

使用js怎么设置视频背景

要使用JavaScript设置网页的视频背景&#xff0c;你需要将视频元素添加到你的HTML文档中&#xff0c;然后使用JavaScript来控制它 首先&#xff0c;在你的HTML文件中添加一个 <video> 元素 <video id"video-background" autoplay muted loop><sourc…

勒索病毒最新变种.Malloxx勒索病毒来袭,如何恢复受感染的数据?

导言&#xff1a; 勒索病毒已经成为网络威胁的一个突出问题。其中&#xff0c;.Malloxx勒索病毒是一个危险的勒索软件&#xff0c;它能够加密你的数据文件&#xff0c;使其无法访问。本文91数据恢复将向您介绍.Malloxx勒索病毒的特点&#xff0c;以及如何恢复被其加密的数据文…

【MySQL】表的内连和外连

文章目录 一. 内连接二. 外连接1. 左外连接2. 右外连接 一. 内连接 利用where子句对两种表形成的笛卡尔积进行筛选&#xff0c;其实就是内连接的一种方式 另一种方式是inner join select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件现在有如下表 mysql> desc…

M2芯片的Mac上安装Linux虚拟机——提前帮你踩坑

M2芯片的Mac上安装Linux虚拟机——提前帮你踩坑 1. 前言1.1 系统说明1.2 Linux系统选择——提前避坑1.3 下载vmware_fusion1.3.1 官网下载1.3.2 注册 CAPTCHA验证码问题1.3.3 产品说明 1.4 下载操作系统镜像1.4.1 下载centos&#xff08;如果版本合适的&#xff09;1.4.2 下载…

c 几种父进程主动终止子进程的方法

1.如子进程是循环状态 子进程循环等待键盘的输入&#xff0c;如父进程模拟键盘输入一个字符&#xff0c;子进程收到就跳出scanf&#xff08;&#xff09;。同理&#xff0c;如是socket 的accept&#xff08;&#xff09;等待&#xff0c;也可以发送一字符&#xff0c;让子进程…

Excel 自动提取某一列不重复值

IFERROR(INDEX($A$1:$A$14,MATCH(0,COUNTIF($C$1:C1,$A$1:$A$14),0)),"")注意&#xff1a;C1要空置&#xff0c;从C2输入公式 参考&#xff1a; https://blog.csdn.net/STR_Liang/article/details/105182654 https://zhuanlan.zhihu.com/p/55219017?utm_id0

c++视觉处理---直方图均衡化

直方图均衡化 直方图均衡化是一种用于增强图像对比度的图像处理技术。它通过重新分布图像的像素值&#xff0c;以使图像的直方图变得更均匀&#xff0c;从而提高图像的视觉质量。在OpenCV中&#xff0c;您可以使用 cv::equalizeHist 函数来执行直方图均衡化。以下是 cv::equal…

06-Zookeeper选举Leader源码剖析

上一篇&#xff1a;05-Zookeeper典型使用场景实战 一、为什么要看源码 提升技术功底&#xff1a;学习源码里的优秀设计思想&#xff0c;比如一些疑难问题的解决思路&#xff0c;还有一些优秀的设计模式&#xff0c;整体提升自己的技术功底深度掌握技术框架&#xff1a;源码看多…

Jenkins更换主目录

Jenkins储存所有的数据文件在这个目录下. 你可以通过以下几种方式更改&#xff1a; 使用你Web容器的管理工具设置JENKINS_HOME环境参数.在启动Web容器之前设置JENKINS_HOME环境变量.(不推荐)更改Jenkins.war(或者在展开的Web容器)内的web.xml配置文件. 这个值在Jenkins运行时…

ExcelBDD Python指南

在Python里面支持BDD Excel BDD Tool Specification By ExcelBDD Method This tool is to get BDD test data from an excel file, its requirement specification is below The Essential of this approach is obtaining multiple sets of test data, so when combined with…