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

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

本文一共为大家分享25个pandas技巧,分为两篇分享给大家。

显示已安装的版本

输入下面的命令查询pandas版本:

In [7]:pd.__version__
Out[7]:'0.24.2'

如果你还想知道pandas所依赖的模块的版本,你可以使用show_versions()函数:

In [9]:
pd.show_versions()


INSTALLED VERSIONS 
------------------ 
commit: None 
python: 3.7.3.final.0 
python-bits: 64 
OS: Darwin 
OS-release: 18.6.0 
machine: x86_64 
processor: i386 
byteorder: little 
LC_ALL: None 
LANG: en_US.UTF-8 
LOCALE: en_US.UTF-8 


pandas: 0.24.2 
pytest: None 
pip: 19.1.1 
setuptools: 41.0.1 
Cython: None 
numpy: 1.16.4 
scipy: None 
pyarrow: None 
xarray: None 
IPython: 7.5.0 
sphinx: None 
patsy: None 
dateutil: 2.8.0 
pytz: 2019.1 
blosc: None 
bottleneck: None 
tables: None 
numexpr: None 
feather: None 
matplotlib: 3.1.0 
openpyxl: None 
xlrd: None 
xlwt: None 
xlsxwriter: None 
lxml.etree: None 
bs4: None 
html5lib: None 
sqlalchemy: None 
pymysql: None 
psycopg2: None 
jinja2: 2.10.1 
s3fs: None 
fastparquet: None 
pandas_gbq: None 
pandas_datareader: None 
gcsfs: None

你可以查看到Python,pandas, Numpy, matplotlib等的版本信息。

创建示例DataFrame

假设你需要创建一个示例DataFrame。有很多种实现的途径,我最喜欢的方式是传一个字典给DataFrame constructor,其中字典中的keys为列名,values为列的取值。

现在如果你需要创建一个更大的DataFrame,上述方法则需要太多的输入。在这种情况下,你可以使用Numpy的random.rand()函数,告诉它行数和列数,将它传递给DataFrame constructor:


这种方式很好,但如果你还想把列名变为非数值型的,你可以强制地将一串字符赋值给columns参数:


你可以想到,你传递的字符串的长度必须与列数相同。

更改列名

让我们来看一下刚才我们创建的示例DataFrame:


我更喜欢在选取pandas列的时候使用点(.),但是这对那么列名中含有空格的列不会生效。让我们来修复这个问题。


更改列名最灵活的方式是使用rename()函数。你可以传递一个字典,其中keys为原列名,values为新列名,还可以指定axis:

In [14]:
df = df.rename({'col one':'col_one', 'col two':'col_two'}, axis='columns')

使用这个函数最好的方式是你需要更改任意数量的列名,不管是一列或者全部的列。


如果你需要一次性重新命令所有的列名,更简单的方式就是重写DataFrame的columns属性:

In [15]:
df.columns = ['col_one', 'col_two']

如果你需要做的仅仅是将空格换成下划线,那么更好的办法是使用str.replace()方法,这是因为你都不需要输入所有的列名:

In [16]:
df.columns = df.columns.str.replace(' ', '_')

上述三个函数的结果都一样,可以更改列名使得列名中不含有空格:


最后,如果你需要在列名中添加前缀或者后缀,你可以使用add_prefix()函数:


或者使用add_suffix()函数:

行序反转

让我们来看一下drinks这个DataFame:

In [20]:
drinks.head()


Out[20]:

countrybeer_servingsspirit_servingswine_servingstotal_litres_of_pure_alcoholcontinent
0Afghanistan0000.0Asia
1Albania89132544.9Europe
2Algeria250140.7Africa
3Andorra24513831212.4Europe
4Angola21757455.9Africa

该数据集描述了每个国家的平均酒消费量。如果你想要将行序反转呢?

最直接的办法是使用loc函数并传递::-1,跟Python中列表反转时使用的切片符号一致:

In [21]:
drinks.loc[::-1].head()


Out[21]:

countrybeer_servingsspirit_servingswine_servingstotal_litres_of_pure_alcoholcontinent
192Zimbabwe641844.7Africa
191Zambia321942.5Africa
190Yemen6000.1Asia
189Vietnam111212.0Asia
188Venezuela33310037.7South America


如果你还想重置索引使得它从0开始呢?


你可以使用reset_index()函数,告诉他去掉完全抛弃之前的索引:

In [22]:
drinks.loc[::-1].reset_index(drop=True).head()


Out[22]:

countrybeer_servingsspirit_servingswine_servingstotal_litres_of_pure_alcoholcontinent
0Zimbabwe641844.7Africa
1Zambia321942.5Africa
2Yemen6000.1Asia
3Vietnam111212.0Asia
4Venezuela33310037.7South America

你可以看到,行序已经反转,索引也被重置为默认的整数序号。

列序反转

跟之前的技巧一样,你也可以使用loc函数将列从左至右反转:

In [23]:
drinks.loc[:, ::-1].head()


Out[23]:

continenttotal_litres_of_pure_alcoholwine_servingsspirit_servingsbeer_servingscountry
0Asia0.0000Afghanistan
1Europe4.95413289Albania
2Africa0.714025Algeria
3Europe12.4312138245Andorra
4Africa5.94557217Angola

逗号之前的冒号表示选择所有行,逗号之后的::-1表示反转所有的列,这就是为什么country这一列现在在最右边。

通过数据类型选择列

这里有drinks这个DataFrame的数据类型:

In [24]:
drinks.dtypes


Out[24]:
country                          object
beer_servings                     int64
spirit_servings                   int64
wine_servings                     int64
total_litres_of_pure_alcohol    float64
continent                        object
dtype: object

假设你仅仅需要选取数值型的列,那么你可以使用select_dtypes()函数:

In [25]:
drinks.select_dtypes(include='number').head()


Out[25]:
‍

beer_servingsspirit_servingswine_servingstotal_litres_of_pure_alcohol
00000.0
189132544.9
2250140.7
324513831212.4
421757455.9

这包含了int和float型的列。


你也可以使用这个函数来选取数据类型为object的列:


你还可以选取多种数据类型,只需要传递一个列表即可:


你还可以用来排除特定的数据类型:

将字符型转换为数值型

让我们来创建另一个示例DataFrame:


这些数字实际上储存为字符型,导致其数据类型为object:


为了对这些列进行数学运算,我们需要将数据类型转换成数值型。你可以对前两列使用astype()函数:


但是,如果你对第三列也使用这个函数,将会引起错误,这是因为这一列包含了破折号(用来表示0)但是pandas并不知道如何处理它。

你可以对第三列使用to_numeric()函数,告诉其将任何无效数据转换为NaN:


如果你知道NaN值代表0,那么你可以fillna()函数将他们替换成0:


最后,你可以通过apply()函数一次性对整个DataFrame使用这个函数:


仅需一行代码就完成了我们的目标,因为现在所有的数据类型都转换成float:

减小DataFrame空间大小

pandas DataFrame被设计成可以适应内存,所以有些时候你可以减小DataFrame的空间大小,让它在你的系统上更好地运行起来。


这是drinks这个DataFrame所占用的空间大小:


可以看到它使用了30.4KB。


如果你对你的DataFrame有操作方面的问题,或者你不能将它读进内存,那么在读取文件的过程中有两个步骤可以使用来减小DataFrame的空间大小。

第一个步骤是只读取那些你实际上需要用到的列,可以调用usecols参数:


通过仅读取用到的两列,我们将DataFrame的空间大小缩小至13.6KB。


第二步是将所有实际上为类别变量的object列转换成类别变量,可以调用dtypes参数:


通过将continent列读取为category数据类型,我们进一步地把DataFrame的空间大小缩小至2.3KB。


值得注意的是,如果跟行数相比,category数据类型的列数相对较小,那么catefory数据类型可以减小内存占用。

按行从多个文件中构建DataFrame

假设你的数据集分化为多个文件,但是你需要将这些数据集读到一个DataFrame中。


举例来说,我有一些关于股票的小数聚集,每个数据集为单天的CSV文件。这是第一天的:


这是第二天的:


这是第三天的:


你可以将每个CSV文件读取成DataFrame,将它们结合起来,然后再删除原来的DataFrame,但是这样会多占用内存且需要许多代码


更好的方式为使用内置的glob模块。你可以给glob()函数传递某种模式,包括未知字符,这样它会返回符合该某事的文件列表。在这种方式下,glob会查找所有以stocks开头的CSV文件:


glob会返回任意排序的文件名,这就是我们为什么要用Python内置的sorted()函数来对列表进行排序。


我们以生成器表达式用read_csv()函数来读取每个文件,并将结果传递给concat()函数,这会将单个的DataFrame按行来组合:


不幸的是,索引值存在重复。为了避免这种情况,我们需要告诉concat()函数来忽略索引,使用默认的整数索引:

按列从多个文件中构建DataFrame

上一个技巧对于数据集中每个文件包含行记录很有用。但是如果数据集中的每个文件包含的列信息呢?


这里有一个例子,dinks数据集被划分成两个CSV文件,每个文件包含三列:


同上一个技巧一样,我们以使用glob()函数开始。这一次,我们需要告诉concat()函数按列来组合:


现在我们的DataFrame已经有六列了。

End.

译者:山阴少年

来源:博客园

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

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

pandas 常用45个操作方法(详解) pandas 在数据分析中的常用操作,数据合并、级联、透视表,交叉表,多层索引,窗口函数、分箱、分组聚合、随机取样等等 阅读详情

相关推荐

Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法

Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法 目录 Python使用pandas设置数据列中float数据类型的有效小数位数、抑制科学计数法 #pandas默认float数值使用科学计数法 #pandas设置保留四位小数1 #pandas设置保留四位小数2 #获取dataframe中数值列的第一个值 #pandas默认float数值使用科学计数法 #pandas默认float数值使用科学计数法 import numpy as np im

data+scenario+science+insight 2807

pandas的dataframe如何更改数据类型?

pandas的dataframe数据类型转换 在使用pandas库进行数据分析时,有时候会需要将object类型转换成数值类型(float,int),那么如何做呢? 主要有以下三种方法:创建时指定类型,df.astype强制类型转换,以及使用pd.to_numeric() 转换成适当数值类型。 一,创建时指定类型 二,使用df.astype()强制类型转换 三,...

Python_Ai_Road的博客 17万+

Mamba vs YOLO:目标检测选型指南(附实际项目对比)

本文深入对比了Mamba和YOLO在目标检测领域的性能差异与应用场景。通过实际项目数据,分析了两者在城市交通监控、工业质检等场景下的表现,提供了详细的选型指南和部署优化建议,帮助开发者根据实时性、精度等需求选择最适合的解决方案。

weixin_29062255的博客 369

python pandas如何转换‘object’成其他数据类型

python pandas如何转换‘object’成其他数据类型transfer the type of pvt_mean_rt transfer the type of pvt_mean_rt 老版本表达(失效) df = df.convert_objects(convert_numeric=True) 新的语法表达 df[‘pvt_mean_rt’] = df[‘pvt_mean_rt’].apply(pd.to_numeric, errors=‘coerce’) ...

schinn的博客 6930

基于Python+OpenCV中文及符号检测

一、项目背景与意义在图像处理、文档识别、自动翻译等场景中,中文及符号的准确检测是一个重要且复杂的任务。传统的字符检测方法往往对英文等拉丁字母系的识别效果较好,但对中文及特殊符号的识别准确率较低。本项目旨在利用Python编程语言结合OpenCV库,开发一个能够高效、准确地检测图像中中文及符号的系统,为相关领域的研究和应用提供技术支撑。二、技术实现图像预处理:利用OpenCV的图像处理功能,对输入的图像进行灰度化、二值化、滤波去噪等预处理操作,以提高中文及符号检测的准确性[1]。

2301_79809972的博客 1121

Vivado新手必看:5分钟搞定FPGA程序固化到Flash(附MCS文件生成全流程)

本文为FPGA新手详细解析了如何将程序固化到Flash存储器的完整流程。核心在于理解SRAM工艺FPGA断电易失的特性,并利用Vivado工具将比特流文件转换为Flash可识别的MCS文件。文章重点拆解了生成MCS文件的关键配置步骤、硬件连接要点,以及通过JTAG烧写Flash的实战操作,并提供了常见启动失败问题的排查清单,帮助开发者实现设计从调试到产品部署的关键跨越。

weixin_29230901的博客 356

pandas怎么转换数据类型_Python dataframe更改数据类型

有时经过预处理的dataframe其数据类型不是我们所需要的,如下图所示从上图可看出,df里的数据并不是需要的float类型,而是object。通常情况下使用object也没有问题,但如果需要对数据进行数学上的操作时,就会有异常。例如比较df里的最大值:从上面可以看出异常:环比里最大值为99.9,明显是错误的。这时就需要将这些数据从object类型改为float型。更改类型的方法有如下几种:1.使...

weixin_39757743的博客 2142

计算机组成原理汉字编码与校验设计实验报告(汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码)

这次实验利用logisim进行设计,进行了以下这四个实验,其中分为汉字国标码转区位码实验、汉字机内码获取实验、海明编码电路设计与海明解码,实验报告分为四个部分,在这四个部分中依次对四个实验的方案设计,设计思路进行了介绍

zhang2gongzi的博客 6万+

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

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

小詹学python的博客 968

Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包

Lakes.AERMOD.View.v8.9.0 1CD大气扩散模型软件包 Lakes Environmental ARTM View v1.4.2 1CD放射物扩散模拟模型 Aermod View是一套完整的、功能强大的大气扩散模型软件包,并将美国EPA指定的大气扩散模型(如下)完美的集成成为一个综合的操作平 台: - AERMOD 电话TEL:18980583122  客服 QQ:11

yyii0000的博客 4001

Vue3 - 详细实现微信公众号H5网页内置浏览器中预览下载word文档(doc)、excel表格(xls)、ppt文稿、pdf文档等文件,微信内部直接打开预览和下载到本地教程,安卓苹果手机无差异兼容

vue3,nuxt3,微信公众号,h5,移动端,网页,网站,vue微信内置浏览器下载文件,下载文件,在微信浏览器里面实现下载任意文件,H5需要在微信浏览器中下载excel文件,实现网页在微信内置浏览器中下载文件详细教程,安卓点击下载会提示打开浏览器,后端返回流文件,如何解决无法下载文件,跳转至浏览器下载文件,发送到电脑微信,安卓,苹果,手机系统,微信H5页面,vue3微信公众号H5网站,内置浏览器下载文档,如何在微信浏览器中预览office文件,word文档,excel文档,pdf文档,ppt文档,offi

🏆 前端领域优质创作者 1万+

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

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

MineData 1783

计算机视觉与深度学习 | 2024年至2025年图像匹配算法总结(原理,公式,代码,开源链接)

以上总结覆盖了当前主流和前沿技术,实际选择需结合具体场景(速度/精度/资源限制)评估。

尘世冰封的专栏 1595

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

【AI大模型应用开发】【LlamaIndex教程】2. 存储模块:如何在 LlamaIndex 中使用自定义的向量数据库?(附代码)

前面文章两行代码就实现了文档的切分和向量化存储以及持久化存储。如果我们想用自定义的向量化数据库呢?

同学小张的博客 2119

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

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

从剪贴板中创建DataFrame假设你将一些数据储存在Excel或者Google Sheet中,你又想要尽快地将他们读取至DataFrame中。你需要选择这些数据并复制至剪贴板。然后,你...

lsxxx2011的专栏 801

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

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

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

上一篇: 博士学位真的那么重要吗?上交大博士亲述科研心路,获4万高赞~
下一篇: 一位读研时通过实习和比赛收入五十万的同学
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值