Joyful pandas--Task02 索引

【编程实践】Joyful-Pandas(下)Task02(第七章):文本数据 【编程实践】Joyful-Pandas(下)Task02(第七章):文本数据string类型的性质string与object的区别String类型的转换拆分与拼接str.split方法分割符与str的位置元素选取其他参数str.cat方法不同对象的拼接模式cat中的索引对齐替换子串匹配与提取常用字符串方法问题与练习问题练习 缺失数据和文本数据(尤其是混杂性文本)是数据预处理中比较麻烦的类型,本章节聚焦于文本数据。 理论部分 掌握基本正则表达式的用法 理解string类型的性质 掌握文本类型的5类操作 熟悉 阅读详情

这章内容太多了(哭唧唧),先这样,往后来补充吧。。

理论部分

  • 熟练掌握多种单层索引方式及其异同
  • 掌握和理解多级索引操作
  • 熟悉常用索引设定方法及其区别
  • 掌握索引函数、去重函数和抽样函数
    练习部分
  • UFO数据集分析
  • 口袋妖怪数据集分析
    一、单级索引
  1. loc方法、iloc方法、[]操作符
    最常用的索引方法可能就是这三类,其中iloc表示位置索引,loc表示标签索引,[]也具有很大的便利性,各有特点
    (a)loc方法
#① 单行索引
 df.loc[1103]
 #② 多行索引
df.loc[[1102,2304]]
#(注意:所有在loc中使用的切片全部包含右端点!这是因为如果作为Pandas的使用者,那么肯定不太关心最后一个标签再往后一位是什么,但是如果是左闭右开,那么就很麻烦,先要知道再后面一列的名字是什么,非常不方便,因此Pandas中将loc设计为左右全闭)
df.loc[1304:2103].head()
df.loc[2402::-1].head()
#③ 单列索引:
df.loc[:,'Height'].head()
#④ 多列索引:
df.loc[:,['Height','Math']].head()
#注意与下区别
df.loc[:,'Height':'Math'].head()
#⑤ 联合索引:3代表间隔
df.loc[1102:2401:3,'Height':'Math'].head()
#⑥ 函数式索引:
df.loc[lambda x:x['Gender']=='M'].head()
#loc中使用的函数,传入参数就是前面的df
#这里的例子表示,loc中能够传入函数,并且函数的输入值是整张表,输出为标量、切片、合法列表(元素出现在索引中)、合法索引
def f(x):
    return [1101,1103]
df.loc[f]
#⑦ 布尔索引(将重点在第2节介绍)
df.loc[[True if i[-1]=='4' or i[-1]=='7' else False for i in df['Address'].values]].head()
df.loc[df['Address'].isin(['street_7','street_4'])].head()

**小节:**本质上说,loc中能传入的只有布尔列表和索引子集构成的列表,只要把握这个原则就很容易理解上面那些操作
(b)iloc方法(注意与loc不同,切片右端点不包含)

#① 单行索引:
df.iloc[3]
#② 多行索引:
df.iloc[3:5]
#③ 单列索引:
df.iloc[:,3].head()
#④ 多列索引:
df.iloc[:,7::-2].head()
#⑤ 混合索引:
df.iloc[3::4,7::-2].head()
#⑥ 函数式索引:
df.iloc[lambda x:[3]].head()

小节:iloc中接收的参数只能为整数或整数列表或布尔列表,不能使用布尔Series,如果要用就必须如下把values拿出来

(c) []操作符
(c.1)Series的[]操作

#① 单元素索引:
s = pd.Series(df['Math'],index=df.index)
s[1101]
#使用的是索引标签
#② 多行索引:
s[0:4]
#使用的是绝对位置的整数切片,与元素无关,这里容易混淆
#③ 函数式索引:
s[lambda x: x.index[16::-6]]
#注意使用lambda函数时,直接切片(如:s[lambda x: 16::-6])就报错,此时使用的不是绝对位置切片,而是元素切片,非常易错
#④ 布尔索引:
s[s>80]
#【注意】如果不想陷入困境,请不要在行索引为浮点时使用[]操作符,因为在Series中[]的浮点切片并不是进行位置比较,而是值比较,非常特殊
s_int = pd.Series([1,2,3,4],index=[1,3,5,6])
s_float = pd.Series([1,2,3,4],index=[1.,3.,5.,6.])
s_int
s_int[2:]
s_float
#注意和s_int[2:]结果不一样了,因为2这里是元素而不是位置
s_float[2:]

(c.2)DataFrame的[]操作

#① 单行索引:
df[1:2]
#这里非常容易写成df['label'],会报错
#同Series使用了绝对位置切片
#如果想要获得某一个元素,可用如下get_loc方法:
row = df.index.get_loc(1102)
df[row:row+1]
#② 多行索引:
#用切片,如果是选取指定的某几行,推荐使用loc,否则很可能报错
df[3:5]
#③ 单列索引:
df['School'].head()
#④ 多列索引:
df[['School','Math']].head()
#⑤函数式索引:
df[lambda x:['Math','Physics']].head()
#⑥ 布尔索引:
df[df['Gender']=='F'].head()

小节:一般来说,[]操作符常用于列选择或布尔选择,尽量避免行的选择

  1. 布尔索引
#(a)布尔符号:'&','|','~':分别代表和and,或or,取反not
df[(df['Gender']=='F')&(df['Address']=='street_2')].head()
df[(df['Math']>85)|(df['Address']=='street_7')].head()
df[~((df['Math']>75)|(df['Address']=='street_1'))].head()
#loc和[]中相应位置都能使用布尔列表选择:
df.loc[df['Math']>60,df.columns=='Physics'].head()
#思考:为什么df.loc[df['Math']>60,(df[:8]['Address']=='street_6').values].head()得到和上述结果一样?values能去掉吗?
#(b) isin方法
df[df['Address'].isin(['street_1','street_4'])&df['Physics'].isin(['A','A+'])]
#上面也可以用字典方式写:
df[df[['Address','Physics']].isin({'Address':['street_1','street_4'],'Physics':['A','A+']}).all(1)]
#all与&的思路是类似的,其中的1代表按照跨列方向判断是否全为True
  1. 快速标量索引
#当只需要取一个元素时,at和iat方法能够提供更快的实现:
display(df.at[1101,'School'])
display(df.loc[1101,'School'])
display(df.iat[0,0])
display(df.iloc[0,0])
#可尝试去掉注释对比时间
#%timeit df.at[1101,'School']
#%timeit df.loc[1101,'School']
#%timeit df.iat[0,0]
#%timeit df.iloc[0,0]
  1. 区间索引
#此处介绍并不是说只能在单级索引中使用区间索引,只是作为一种特殊类型的索引方式,在此处先行介绍
#(a)利用interval_range方法
pd.interval_range(start=0,end=5)
#closed参数可选'left''right''both''neither',默认左开右闭
pd.interval_range(start=0,periods=8,freq=5)
#periods参数控制区间个数,freq控制步长
#(b)利用cut将数值列转为区间为元素的分类变量,例如统计数学成绩的区间情况:
math_interval = pd.cut(df['Math'],bins=[0,40,60,80,100])
#注意,如果没有类型转换,此时并不是区间类型,而是category类型
math_interval.head()
#(c)区间索引的选取
df_i = df.join(math_interval,rsuffix='_interval')[['Math','Math_interval']]\
            .reset_index().set_index('Math_interval')
df_i.head()
df_i.loc[65].head()
#包含该值就会被选中
df_i.loc[[65,90]].head()
#如果想要选取某个区间,先要把分类变量转为区间变量,再使用overlap方法
#df_i.loc[pd.Interval(70,75)].head() 报错
df_i[df_i.index.astype('interval').overlaps(pd.Interval(70, 85))].head()
#只要索引与(70,85]这个区间有交集就会被选中,注意pd.Interval默认构造区间都是左开右闭,可选closed参数right,left,both,neither

二、多级索引
三、索引设定
四、常用索引型函数
五、重复元素处理
六、抽样函数

【编程实践】Joyful-Pandas(下)Task01(第六章):缺失数据 【编程实践】Joyful-Pandas(下)Task01(第六章):缺失数据Datawhale学习要求Nullable类型与NA符号缺失数据的运算与分组填充与剔除插值(interpolation)问题练习 缺失数据和文本数据(尤其是混杂性文本)是数据预处理中比较麻烦的类型,本章节聚焦于缺失数据。 Nullable类型和String类型可能在未来成为Pandas的主流数据类型。 Datawhale学习要求 理论部分 理解Nullable类型与NA符号 掌握缺失值的填充与剔除 掌握常见缺失值插值方法 练习部 阅读详情

相关推荐

3天干完6个月的活,Claude把模型搬上AMD

一条挺刺激的消息:Anthropic 给投资人的材料里有一张幻灯片,写着它的 Claude Mythos Preview 只花了大约​,就摸清了怎么让另一个 Claude 模型在 AMD 的 MI355X 上跑起来。同一处还写了个对照数字:过去给一块新芯片做推理适配,通常要几十名工程师、​。3 天对 6 个月,这个比值太扎眼,当天中文互联网上就冒出一堆「英伟达的护城河塌了」的说法。我把能翻到的材料都翻了一遍,越看越觉得,塌掉的那一小块是真的,可塌的位置和很多人想的不一样。

DeepPing,日更,陪你聪明看世界。 439

告别痛苦,快乐学习Pandas!开源教程《Joyful-Pandas》发布

Datawhale作者:耿远昊、Datawhale团队寄语:Pandas 是基于Numpy的一种工具,是为了解决数据分析任务而创建的,其纳入了大量库和一些标准的数据模型,提供了大量能...

Datawhale 2882

卡方分布的前世今生:一个统计概念的演化史

本文追溯了卡方分布从19世纪末的理论雏形到现代统计推断核心工具的发展历程。从Karl Pearson的数学奠基到Ronald Fisher的理论完善,卡方分布在医学研究、社会科学和机器学习等领域展现出广泛应用。文章通过代码示例和性质分析,揭示了这一统计概念如何持续推动数据科学创新。

weixin_29251567的博客 392

【joyful pandas 03】索引

索引 通过索引进行数据切片、其中包含iloc和loc方法的详解。 通过索引构造矩阵,以及构造多层索引,索引值的替换、修改。 基于索引的计算。

weixin_45389860的博客 344

一文读懂 MAVLink、PPM、SBUS:无人机通信协议的工作原理与适用场景

本文系统对比无人机领域三大核心通信协议:MAVLink作为全链路数据协议,支持飞控与地面站的双向通信,适合航拍测绘等专业场景;SBUS是数字化的高效控制协议,具备16通道、抗干扰特性,成为中高端设备标配;PPM作为传统模拟协议,成本低廉但性能有限,适合入门级应用。文章深入解析各协议的工作原理、帧结构、适用场景及调试技巧,指出MAVLink侧重状态监控、SBUS/PPM专注控制指令的互补关系,并给出新手选型建议:入门选PPM,进阶用SBUS,开发必备M

bother3000的博客 7129

全自动数据分析 - Claude Code Sub-Agents:自动化数据分析工厂

别忘了!claude code也是agent框架,类似langgraph,crewAI,autogen等等agent框架。我改造claude code搞一个数据分析智能体AI。试试看行不行!:让数据分析变得像聊天一样简单!

liangdabiao的博客 1072

joyful pandas task3-索引

(1)loc索引 1.选择多行 df_demo.loc[[‘Qiang Sun’,‘Quan Zhao’], [‘School’,‘Gender’]] df_demo.loc[‘Gaojuan You’:‘Gaoqiang Qian’, ‘School’:‘Gender’] 2.条件筛选 df_demo.loc[df_demo.Weight>70].head() df_demo.loc[condition_1 | condition_2] 3.前面所提到的传入元素列表,也可以通过isin方法返回的布尔

qq_41768189的博客 189

【实战指南】Green Hills MULTI-IDE 从零安装到工程创建全流程

本文详细介绍了Green Hills MULTI-IDE从零安装到工程创建的全流程,包括系统要求检查、安装步骤、工程配置及调试技巧。特别适合嵌入式开发新手快速上手这款专业IDE工具,提升开发效率。

weixin_28740299的博客 480

joyful pandas task2-pandas预备知识

pandas读入文件方式 csv文件:df_csv = pd.read_csv(’…/data/my_csv.csv’) txt文件:df_txt = pd.read_table(’…/data/my_table.txt’) Excel文件:df_excel = pd.read_excel(’…/data/my_excel.xlsx’) 数据写入 df_csv.to_csv(’…/data/my_csv_saved.csv’, index=False) df_excel.to_excel(’…/data/m

qq_41768189的博客 241

思科网络进阶——多生成树协议(MSTP)配置的一课一得

三、实验拓扑1)设计一个网络架构,要有核心层和接入层,都使用思科交换机。2)企业有4个部门,要求这四个部门都可以上网,但分属不同的VLAN中,这样今后可以做其它安全策略以确保网络安全,这些策略如今后学到的访问控制列表ACL。3)网络架构的设计要具有冗余,防止一条线路或一台设备终端导致的业务中断。4)由于硬件冗余而产生的环路要处理好,也就是要在逻辑上(或者说通过配置)防止物理环路的产生。5)不能因为防止物理环路而导致某端口没有流量,这样浪费端口资源及设备间互联的带宽资源。

zhu52010的博客 3400

AMBA-AXI and ACE协议详解(十)

本章介绍了ACE协议中的Barrier事务机制,包括内存屏障和同步屏障两种类型。

Crazzy_M的博客 615

joyful pandas task6-连接

1.值连接 merge函数: 1.左连接:df1.merge(df2, on=‘Name’, how=‘left’) 2.不同列名:df1.merge(df2, left_on=‘df1_name’, right_on=‘df2_name’, how=‘left’) 3.如果两个表中的列出现了重复的列名,那么可以通过suffixes参数指定。 df1.merge(df2, on=‘Name’, how=‘left’, suffixes=[’_Chinese’,’_Math’]) 4.在某些时候出现重复元素是

qq_41768189的博客 186

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

UFAST车道线检测 Ultra-Fast-Lane-Detection 从环境搭建到复现完成(一)

m0_46364958的博客 4345

Joyful pandas--Task04 变形

学习来源:https://nbviewer.jupyter.org/github/GYHHAHA/Joyful-Pandas/blob/master/第4章%20变形.ipynb 一、透视表 1. pivot 一般状态下,数据在DataFrame会以压缩(stacked)状态存放,例如上面的Gender,两个类别被叠在一列中,pivot函数可将某一列作为新的cols: df.pivot(index...

Simone_future的博客 317

如何安装最新版本的 SAP ABAP Development Tool ( ADT ) ,并且能够随时升级

下载链接:https://tools.hana.ondemand.com/#abap 首先安装 Eclipse IDE for Java Developers 找到适合自己操作系统的 Eclipse 安装包: 安装之后,打开Eclipse: Install -> New Softwares, 输入 url:https://tools.hana.ondemand.com/latest 全部安装: 安装完毕之后,新建一个 ABAP Project,本地 SAP GUI 里添加的系统,会自动带出来:

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4289

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

joyful pandas task5-变形

1.按列创建数据 pd.DataFrame({‘Gender’:[‘F’,‘F’,‘M’,‘M’], ‘Height’:[163, 160, 175, 180]}) 2.pivot_table 作用:把长表转为宽表 df.pivot_table(index = ‘Name’, columns = ‘Subject’, values = ‘Grade’, aggfunc = lambda x:x.mean()) 3.wide_to_long函数 作用:把宽表转为长表 pd.wide_to_long(df, s

qq_41768189的博客 180

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Joyful pandas——Task05合并

学习来源:https://nbviewer.jupyter.org/github/GYHHAHA/Joyful-Pandas/blob/master/第5章%20合并.ipynb 一、append与assign append方法 (a)利用序列添加行(必须指定name) df_append = df.loc[:3,['Gender','Height']].copy() df_append s ...

Simone_future的博客 301

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Joyful Pandas--Task03分组

学习来源:https://nbviewer.jupyter.org/github/GYHHAHA/Joyful-Pandas/blob/master/第3章%20分组.ipynb 一、SAC过程 内涵 SAC指的是分组操作中的split-apply-combine过程 其中split指基于某一些规则,将数据拆成若干组,apply是指对每一组独立地使用函数,combine指将每一组的结果组合成某一...

Simone_future的博客 319

joyful pandas task11-task

task:水压站点的特征工程 df1和df2中分别给出了18年和19年各个站点的数据,其中列中的H0至H23分别代表当天0点至23点;df3中记录了18-19年的每日该地区的天气情况,请完成如下的任务: import pandas as pd import numpy as np df1 = pd.read_csv(‘yali18.csv’) df2 = pd.read_csv(‘yali19.csv’) df3 = pd.read_csv(‘qx1819.csv’) 通过df1和df2构造df,把时间设为

qq_41768189的博客 171

joyful pandas task10-时序数据

1.时间戳 1.Timestamp的构造与属性 ts = pd.Timestamp(‘2020/1/1’) ts = pd.Timestamp(‘2020-1-1 08:10:30’) 属性:通过year, month, day, hour, min, second可以获取具体的数值。 2.Datetime序列的生成 1.date_range是一种生成连续间隔时间的一种方法,其重要的参数为start, end, freq, periods,它们分别表示开始时间,结束时间,时间间隔,时间戳个数。 pd.dat

qq_41768189的博客 318

Datawhale组队学习(Pandas) task4-分组

练习1:汽车数据集 1-1:先过滤出所属 Country 数超过2个的汽车,即若该汽车的 Country 在总体数据集中出现次数不超过2则剔除,再按 Country 分组计算价格均值、价格变异系数、该 Country 的汽车数量,其中变异系数的计算方法是标准差除以均值,并在结果中把变异系数重命名为 CoV 。 我的答案 gb = df.groupby('Country') index_list = gb.filter(lambda x:x.shape[0]<=2).index df_drop =

mintminty的博客 518

Datawhale组队学习(Pandas) task5-变形

Joyful Pandas 第五章 变形 练习1 美国非法药物数据集 我的思路 # 1. 考察长表变宽表的知识点 df = pd.read_csv('data/drugs.csv').sort_values(['State','COUNTY','SubstanceName'],ignore_index=True) df_pivot = df.pivot(index=['State','COUNTY','SubstanceName'],columns='YYYY',values='DrugReports'

mintminty的博客 307

动手学数据分析 Task01

今天是学习数据挖掘分析的第1天。 学习内容:1.数据基础操作 2.数据清洗与重构 3.建模与评估 实验环境:jupyter lab 参考资料:joyful-pandas的链接为:https://gitee.com/panjoe/joyful-pandas?_from=gitee_search 实验步骤如下: 1、导入模块numpy 和pandas 2、使用相对和绝对路径读入数据 3、每1000行为一个数据模块,逐块读取 4、改表头和索引关键字 5、信息显示 6、观察表...

bravetomgo的博客 142

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

本地化部署 DeepSeek,构建单细胞与空间转录组 AI 分析平台

weixin_53637133的博客 181

【第 009 讲】全面掌握 Python 注释:注释的定义与作用 | 单行注释 | 三引号与多行注释 | 注释使用的最佳实践

本文系统讲解 Python 注释的完整知识体系:从注释的定义与作用讲起,梳理单行注释的书写位置、临时屏蔽用法与 PEP 8 排版规范,剖析注释被忽略的底层机制;进而说明三引号字符串的本质与嵌套问题;最后给出注释使用的三条实践原则,帮助读者写好可读性高的注释。

大模型全栈工程师 · Thanks_ks 579

Python 的 yield from 到底转发了什么:拆开 send、throw 和那个 return 值

很多人把yield from记成「省一层 for 循环的语法糖」。写和写,结果看着一样,于是就当它只是少敲几个字。这个理解会在三个地方翻车:调用方.send()的值送不进去、子生成器return的值拿不到、异常和close()传不下去。yield from真正做的事是,外层生成器退成一个透明通道。本文所有输出来自本机 CPython 3.13.14 实测。yield from不是循环,是委托——nextsendthrowclose四个方向的流量全部直通子生成器,并且子生成器return。

小小张说故事的博客 152
上一篇: 机器学习基础-Task2 Bayes_plus
下一篇: 机器学习基础-Task3 EM算法
Simone_future
博客等级 码龄7年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值