整理了25个Pandas实用技巧(下)

整理了25个Pandas实用技巧 现在如果你需要创建一个更大的DataFrame,上述方法则需要太多的输入。有很多种实现的途径,我最喜欢的方式是传一个字典给DataFrame constructor,其中字典中的keys为列名,values为列的取值。如果你对你的DataFrame有操作方面的问题,或者你不能将它读进内存,那么在读取文件的过程中有两个步骤可以使用来减小DataFrame的空间大小。该DataFrame包含了与MultiIndexed Series一样的数据,不同的是,现在你可以用熟悉的DataFrame的函数对它进行操作。 阅读详情

从剪贴板中创建DataFrame

假设你将一些数据储存在Excel或者Google Sheet中,你又想要尽快地将他们读取至DataFrame中。


你需要选择这些数据并复制至剪贴板。然后,你可以使用read_clipboard()函数将他们读取至DataFrame中:


和read_csv()类似,read_clipboard()会自动检测每一列的正确的数据类型:


让我们再复制另外一个数据至剪贴板:


神奇的是,pandas已经将第一列作为索引了:


需要注意的是,如果你想要你的工作在未来可复制,那么read_clipboard()并不值得推荐。

将DataFrame划分为两个随机的子集

假设你想要将一个DataFrame划分为两部分,随机地将75%的行给一个DataFrame,剩下的25%的行给另一个DataFrame。


举例来说,我们的movie ratings这个DataFrame有979行:


我们可以使用sample()函数来随机选取75%的行,并将它们赋值给"movies_1"DataFrame:


接着我们使用drop()函数来舍弃“moive_1”中出现过的行,将剩下的行赋值给"movies_2"DataFrame:


你可以发现总的行数是正确的:


你还可以检查每部电影的索引,或者"moives_1":


或者"moives_2":


需要注意的是,这个方法在索引值不唯一的情况下不起作用。

注:该方法在机器学习或者深度学习中很有用,因为在模型训练前,我们往往需要将全部数据集按某个比例划分成训练集和测试集。该方法既简单又高效,值得学习和尝试。

多种类型过滤DataFrame


让我们先看一眼movies这个DataFrame:

In [60]:
movies.head()


Out[60]:

其中有一列是genre(类型):


比如我们想要对该DataFrame进行过滤,我们只想显示genre为Action或者Drama或者Western的电影,我们可以使用多个条件,以"or"符号分隔:

In [62]:
movies[(movies.genre == 'Action') |
       (movies.genre == 'Drama') |
       (movies.genre == 'Western')].head()


Out[62]:

但是,你实际上可以使用isin()函数将代码写得更加清晰,将genres列表传递给该函数:

In [63]:
movies[movies.genre.isin(['Action', 'Drama', 'Western'])].head()


Out[63]:

如果你想要进行相反的过滤,也就是你将吧刚才的三种类型的电影排除掉,那么你可以在过滤条件前加上破浪号:

In [64]:
movies[~movies.genre.isin(['Action', 'Drama', 'Western'])].head()


Out[64]:

这种方法能够起作用是因为在Python中,波浪号表示“not”操作。

DataFrame筛选数量最多类别

假设你想要对movies这个DataFrame通过genre进行过滤,但是只需要前3个数量最多的genre。

我们对genre使用value_counts()函数,并将它保存成counts(type为Series):


该Series的nlargest()函数能够轻松地计算出Series中前3个最大值:


事实上我们在该Series中需要的是索引:


最后,我们将该索引传递给isin()函数,该函数会把它当成genre列表:

In [68]:
movies[movies.genre.isin(counts.nlargest(3).index)].head()


Out[68]:

这样,在DataFrame中只剩下Drame, Comdey, Action这三种类型的电影了。

处理缺失值

让我们来看一看UFO sightings这个DataFrame:


你将会注意到有些值是缺失的。


为了找出每一列中有多少值是缺失的,你可以使用isna()函数,然后再使用sum():


isna()会产生一个由True和False组成的DataFrame,sum()会将所有的True值转换为1,False转换为0并把它们加起来。

类似地,你可以通过mean()和isna()函数找出每一列中缺失值的百分比。


如果你想要舍弃那些包含了缺失值的列,你可以使用dropna()函数:


或者你想要舍弃那么缺失值占比超过10%的列,你可以给dropna()设置一个阈值:


len(ufo)返回总行数,我们将它乘以0.9,以告诉pandas保留那些至少90%的值不是缺失值的列。

一个字符串划分成多列

我们先创建另一个新的示例DataFrame:


如果我们需要将“name”这一列划分为三个独立的列,用来表示first, middle, last name呢?我们将会使用str.split()函数,告诉它以空格进行分隔,并将结果扩展成一个DataFrame:


这三列实际上可以通过一行代码保存至原来的DataFrame:


如果我们想要划分一个字符串,但是仅保留其中一个结果列呢?比如说,让我们以", "来划分location这一列:


如果我们只想保留第0列作为city name,我们仅需要选择那一列并保存至DataFrame:

Series扩展成DataFrame

让我们创建一个新的示例DataFrame:

这里有两列,第二列包含了Python中的由整数元素组成的列表。

如果我们想要将第二列扩展成DataFrame,我们可以对那一列使用apply()函数并传递给Series constructor:


通过使用concat()函数,我们可以将原来的DataFrame和新的DataFrame组合起来:

对多个函数进行聚合

让我们来看一眼从Chipotle restaurant chain得到的orders这个DataFrame:

In [82]:
orders.head(10)


Out[82]:

每个订单(order)都有订单号(order_id),包含一行或者多行。为了找出每个订单的总价格,你可以将那个订单号的价格(item_price)加起来。比如,这里是订单号为1的总价格:


如果你想要计算每个订单的总价格,你可以对order_id使用groupby(),再对每个group的item_price进行求和。


但是,事实上你不可能在聚合时仅使用一个函数,比如sum()。为了对多个函数进行聚合,你可以使用agg()函数,传给它一个函数列表,比如sum()和count():


这将告诉我们没定订单的总价格和数量。

聚合结果与DataFrame组合

让我们再看一眼orders这个DataFrame:

In [86]:
orders.head(10)


Out[86]:

如果我们想要增加新的一列,用于展示每个订单的总价格呢?回忆一下,我们通过使用sum()函数得到了总价格:


sum()是一个聚合函数,这表明它返回输入数据的精简版本(reduced version )。


换句话说,sum()函数的输出:


比这个函数的输入要小:


解决的办法是使用transform()函数,它会执行相同的操作但是返回与输入数据相同的形状:


我们将这个结果存储至DataFrame中新的一列:

In [91]:
orders['total_price'] = total_price
orders.head(10)


Out[91]:

你可以看到,每个订单的总价格在每一行中显示出来了。

这样我们就能方便地甲酸每个订单的价格占该订单的总价格的百分比:

In [92]:
orders['percent_of_total'] = orders.item_price / orders.total_price
orders.head(10)


In [92]:

选取行和列的切片

让我们看一眼另一个数据集:

In [93]:
titanic.head()


Out[93]:

这就是著名的Titanic数据集,它保存了Titanic上乘客的信息以及他们是否存活。


如果你想要对这个数据集做一个数值方面的总结,你可以使用describe()函数:


但是,这个DataFrame结果可能比你想要的信息显示得更多。

如果你想对这个结果进行过滤,只想显示“五数概括法”(five-number summary)的信息,你可以使用loc函数并传递"min"到"max"的切片:


如果你不是对所有列都感兴趣,你也可以传递列名的切片:

MultiIndexed Series重塑

Titanic数据集的Survived列由1和0组成,因此你可以对这一列计算总的存活率:


如果你想对某个类别,比如“Sex”,计算存活率,你可以使用groupby():


如果你想一次性对两个类别变量计算存活率,你可以对这些类别变量使用groupby():


该结果展示了由Sex和Passenger Class联合起来的存活率。它存储为一个MultiIndexed Series,也就是说它对实际数据有多个索引层级。


这使得该数据难以读取和交互,因此更为方便的是通过unstack()函数将MultiIndexed Series重塑成一个DataFrame:


该DataFrame包含了与MultiIndexed Series一样的数据,不同的是,现在你可以用熟悉的DataFrame的函数对它进行操作。

创建数据透视表

如果你经常使用上述的方法创建DataFrames,你也许会发现用pivot_table()函数更为便捷:


想要使用数据透视表,你需要指定索引(index), 列名(columns), 值(values)和聚合函数(aggregation function)。


数据透视表的另一个好处是,你可以通过设置margins=True轻松地将行和列都加起来:


这个结果既显示了总的存活率,也显示了Sex和Passenger Class的存活率。


最后,你可以创建交叉表(cross-tabulation),只需要将聚合函数由"mean"改为"count":

这个结果展示了每一对类别变量组合后的记录总数。

连续数据转类别数据

让我们来看一下Titanic数据集中的Age那一列:


它现在是连续性数据,但是如果我们想要将它转变成类别数据呢?

一个解决办法是对年龄范围打标签,比如"adult", "young adult", "child"。实现该功能的最好方式是使用cut()函数:


这会对每个值打上标签。0到18岁的打上标签"child",18-25岁的打上标签"young adult",25到99岁的打上标签“adult”。

注意到,该数据类型为类别变量,该类别变量自动排好序了(有序的类别变量)。

Style a DataFrame

上一个技巧在你想要修改整个jupyter notebook中的显示会很有用。但是,一个更灵活和有用的方法是定义特定DataFrame中的格式化(style)。


让我们回到stocks这个DataFrame:


我们可以创建一个格式化字符串的字典,用于对每一列进行格式化。然后将其传递给DataFrame的style.format()函数:


注意到,Date列是month-day-year的格式,Close列包含一个$符号,Volume列包含逗号。


我们可以通过链式调用函数来应用更多的格式化:


我们现在隐藏了索引,将Close列中的最小值高亮成红色,将Close列中的最大值高亮成浅绿色。


这里有另一个DataFrame格式化的例子:


Volume列现在有一个渐变的背景色,你可以轻松地识别出大的和小的数值。


最后一个例子:


现在,Volumn列上有一个条形图,DataFrame上有一个标题。

请注意,还有许多其他的选项你可以用来格式化DataFrame。

额外技巧


Profile a DataFrame

假设你拿到一个新的数据集,你不想要花费太多力气,只是想快速地探索下。那么你可以使用pandas-profiling这个模块。

在你的系统上安装好该模块,然后使用ProfileReport()函数,传递的参数为任何一个DataFrame。它会返回一个互动的HTML报告:

  • 第一部分为该数据集的总览,以及该数据集可能出现的问题列表

  • 第二部分为每一列的总结。你可以点击"toggle details"获取更多信息

  • 第三部分显示列之间的关联热力图

  • 第四部分为缺失值情况报告

  • 第五部分显示该数据及的前几行

使用示例如下(只显示第一部分的报告):

End.

译者:山阴少年

来源:博客园

原文链接:https://nbviewer.jupyter.org/github/justmarkham/pandas-videos/blob/master/top_25_pandas_tricks.ipynb

本文为转载,如有侵权请联系后台删除

域自适应的理解与想法(Domain Adaptation) 这幅图是域适应非常有名的一篇论文中的插图,被很多文章转载。 什么是领域自适应? Domain Adaptation是迁移学习中很重要的一部分内容,目的是把分布不同的源域和目标域的数据,映射到一个特征空间中,使其在该空间中的距离尽可能近。于是在特征空间中对source domain训练的目标函数,就可以迁移到target domain上,提高target domain上的准确率。 上面的图主要的思想来源于GAN,上图由三部分组成:特征映射网络 标签分类网络和和域判别网络 其中,source domain的数. 阅读详情

相关推荐

相机光学(三十八)——VCM(Voice Coil Motor)音圈马达

VCM(Voice Coil Motor)音圈马达全称Voice Coil Montor,电子学里面的音圈电机,是马达的一种。因为原理和扬声器类似,所以叫音圈电机,具有高频响、高精度的特点。其主要原理是在一个永久磁场内,通过改变马达内线圈的直流电流大小,来控制弹簧片的拉伸位置,从而带动上下运动。手机摄像头广泛的使用VCM实现自动对焦功能,通过VCM可以调节镜头的位置,呈现清晰的图像。弹片式结构滚珠式结构摩擦式结构Open loop开马达Close loop闭环马达。

图像学习之旅 7224

13个Pandas实用技巧,请收好

本期的主题是关于python的一个数据分析工具pandas的,归纳整理了一些工作中常用到的pandas使用技巧,方便更高效地实现数据分析。文章很短,不用收藏就能Get~ Pandas技巧总结 1.计算变量缺失率 df=pd.read_csv('titanic_train.csv') def missing_cal(df): """ df :数据集 return:每个变量的缺失率 """ missing_series = df.isnull().sum()/df.shape[0] missing_d

sixqingfeng的博客 531

Ubuntu18.04 SoftRoCE安装教程

目标:创建两台Ubuntu18.04虚拟机,安装SoftRoCE环境,一台作为Server,一台作为Client,模拟RDMA通信环境,熟悉RDMA的通信方式。

GGGYL111的博客 1551

50个 Pandas 高频操作技巧,建议收藏

在数据分析和数据建模的过程中需要对数据进行清洗和整理等工作,有时需要对数据增删字段。下面为大家介绍Pandas对数据的。

Python数据挖掘 3778

【ESP32】1.编译、烧录、创建工程

本文介绍了在VSCode中搭建ESP32开发环境并烧录"Hello World"工程的过程。首先通过串口工具成功下载固件后,解决了OpenOCD报错问题。针对头文件无法识别的问题,修改了c_cpp_properties.json配置文件,调整了编译器路径和IntelliSense模式。文章还详细说明了创建新工程的步骤,包括选择芯片型号和项目模板,并验证了串口打印功能。最后提醒在项目构建时要等待完成,避免文件缺失。整个流程涵盖了环境搭建、代码烧录、调试及新项目创建等关键环节。

梁山1号 1485

汇川机器人与PLC通信-ModbusTCP超详细案例

通过汇川机器人与PLC的ModbusTCP通信项目案例,我们可以了解通讯配置的过程,地址映射的方式,对接信号的转换,运行时序的逻辑等注意事项,帮助我们快速应用到项目中。

weixin_44166380的博客 1万+

Pandas 28种常用方法使用总结

Pandas中,我们可以使用apply()方法将一个函数作用于数据框中所有的行或者列上,实现对数据的自定义处理。def process_data(row) : # 处理数据的逻辑 return processed_row # 对每一行进行 df . apply(process_data , axis = 1)在apply()方法中,axis参数可以设置为0表示对每一列进行处理,设置为1表示对每一行进行处理。同时,我们还可以用map()方法和applymap()

z_ipython的博客 9169

小鹏P7车载以太网诊断实战:从OBD口定义到DoIP协议验证

本文详细解析了小鹏P7车载以太网诊断的实战过程。从OBD接口的针脚定义入手,依据ISO13400标准,确认了以太网线对位置,并指导制作专用的RJ45转OBD线束。通过搭建测试环境,使用Ping、端口扫描及Wireshark抓包,最终成功验证了车辆对DoIP协议的支持,为基于以太网的高速诊断与刷写提供了完整的技术路径。

CAT789的专栏 526

pandas 用法总结

pandas 是基于numpy构建的,让以numpy为中心的应用变得更加简单。 一、pandas的两种数据结构 1、Series Series是一种类似于一维数组的对象,它是由一组数据(各种Numpy数据类型)以及与之相关的数据标签(即索引组成)。仅由一组数据即可产生最简单的Series。 Series的字符串表现形式为:索引在左边,值在右边。由于没有设定索引,会自动创建由0到N-1的整数型索引。可以通过Series的values和index属性来获取数组的表示形式和索引对象。 对Series的各个数据点设

Dear_learner的博客 2686

零差云控关节模组:EtherCAT+preempt-RT实现微秒级同步

关节模组是协作机器人、外骨骼与高精度服务机器人的核心执行单元,其性能瓶颈常在于多轴运动的时序一致性与实时闭环能力。实现‘零差’同步依赖于确定性通信(如EtherCAT)与硬实时操作系统支持(如Linux preempt-RT),前者保障指令与状态在微秒级时间戳下全局对齐,后者消除内核调度抖动,使PID控制、电流采样、编码器反馈等关键路径具备纳秒级可预测性。技术价值体现在相位偏差<±0.01°、端到端控制周期稳定1ms、连续运行温漂<±1.2℃等工程指标,广泛应用于力控装配、康复训练、远程遥操作等对动态精度与

weixin_34192816的博客 1198

达梦数据守护集群监视器详解与应用指南

主库/备库:承担读写和只读服务的数据节点Redo 日志:记录数据库变更的核心日志Redo 日志传输:主备库间的日志同步机制Redo 日志重演:备库重做日志的应用过程守护进程 (dmwatcher):实例级别的监控和管理组件监视器 (dmmonitor):集群级别的监控和管理工具监视器作为数据守护系统的重要组成部分,提供了集群监控、故障管理和状态确认等关键功能。达梦数据守护集群监视器是维护数据库高可用性的关键工具。

huanhuanzhou blog 1058

整理了 25 个 Pandas 实用技巧,拿走不谢!

本文一共为大家分享25个pandas技巧。显示已安装的版本输入下面的命令查询pandas版本:1In[7]:pd.__version__ 2Out[7]:0.24.2如果你还想知道p...

小詹学python的博客 968

C#实战:YOLOv5+海康工业相机上位机开发全攻略(从图像采集到检测落地)

工业场景下AI质检系统的开发需要综合考虑硬件适配性、算法性能和稳定性。本文针对新能源电池极片缺陷检测场景,提出基于海康工业相机+YOLOv5+C#的技术方案,涵盖以下关键点: 工业级技术选型:选择支持全局快门的海康相机、OpenCvSharp图像处理、YOLOv5s轻量化模型,确保在无GPU工控机上稳定运行。 开发流程优化: 海康SDK集成:详细说明DLL配置和常见报错解决方案 YOLOv5模型导出:强调batch=1、opset12等工业适配参数 相机采集封装:提供线程安全的C#封装类,支持触发采集模式

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1197

整理了25个Pandas数据分析的实用技巧

译者:山阴少年原文链接:https://nbviewer.jupyter.org/github/justmarkham/pandas-videos/blob/master/top_25_...

MineData 1783

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

整理了25个Pandas实用技巧(上)

本文一共为大家分享25个pandas技巧,分为两篇分享给大家。显示已安装的版本输入下面的命令查询pandas版本:In[7]:pd.__version__ Out[7]:'0....

lsxxx2011的专栏 734

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pandas object转float_整理了25个Pandas实用技巧

译者:山阴少年 链接:https://www.cnblogs.com/jclian91/p/12305471.html本文一共为大家分享25个pandas技巧,分为两篇分享给大家。显示已安装的版本输入下面的命令查询pandas版本:In[7]:pd.__version__Out[7]:'0.24.2'如果你还想知道pandas所依赖的模块的版本,你可以使用show_versions...

weixin_39616686的博客 630

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

pandas获取全部列名_整理了 25 个 Pandas 实用技巧,拿走不谢

作者:『博客园』山阴少年 www.cnblogs.com/jclian91/p/12305471.html本文一共为大家分享25个pandas技巧。显示已安装的版本输入下面的命令查询pandas版本:1In [7]:pd.__version__2Out[7]: 0.24.2如果你还想知道pandas所依赖的模块的版本,你可以使用show_versions函数: 1In [9]:2pd.show_v...

weixin_36168996的博客 4550
上一篇: 一位读研时通过实习和比赛收入五十万的同学
下一篇: 14个数据分析和机器学习项目!附数据集
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值