当前位置: 首页 > 后端技术 > Python

10个Pandas另类数据处理技巧

时间:2023-03-26 10:55:29 Python

本文整理的技巧与之前整理的10个Pandas常用技巧不同。你可能不经常使用它,但有时当你遇到一些非常棘手的问题时,这些技巧有时可以帮助你快速解决一些不常见的问题。1.分类类型默认情况下,选项数量有限的列被分配对象类型。但就内存而言,这不是一个有效的选择。我们可以索引这些列并仅使用对对象的引用而不是实际值。Pandas提供了一个名为Categorical的Dtype来解决这个问题。例如,具有图像路径组成的大数据集。每行有三列:anchor、positive和negative。对分类列使用Categorical可以显着减少内存使用量。#原始数据+------------+--------------------+|类|文件名|+------------+------------------------+|Bathroom|Bathroom\bath_1.jpg||浴室|浴室\bath_100.jpg||浴室|浴室\bath_1003.jpg||浴室|浴室\bath_1004.jpg||浴室|浴室\bath_1005.jpg|+------------+------------------------+#目标+------------------------+------------------------+----------------------------+|锚|正|负|+------------------------+----------------------+--------------------------+|Bathroom\bath_1.jpg|Bathroom\bath_100.jpg|Dinning\din_540.jpg||浴室\bath_100.jpg|浴室\bath_1003.jpg|餐厅\din_1593.jpg||浴室\bath_1003.jpg|浴室\bath_1004.jpg|卧室\bed_329.jpg||浴室\bath_1004.jpg|浴室\bath_1005.jpg|客厅\living_1030.jpg||浴室\bath_1005.jpg|浴室\bath_1007.jpg|卧室\bed_1240.jPG|+------------------------+----------------------+------------------------+filename列的值经常会重复so,所以通过使用Categorical可以大大减少内存使用情况。让我们读取目标数据集并查看内存差异:triplets.info(memory_usage="deep")#ColumnNon-NullCountDtype#---------------------------#0anchor525000non-nullcategory#1positive525000non-nullcategory#2negative525000non-nullcategory#dtypes:category(3)#memoryusage:4.6MB#withoutcategoriestriplets_raw.info(memory_usage="deep")#ColumnNon-NullCountDtype#---------------------------#0anchor525000non-nullobject#1positive525000non-nullobject#2negative525000non-nullobject#dtypes:object(3)#memoryusage:118.1MB差异非常大,并且随着重复次数的增加,差异越来越大非-线性地。2.行列转换SQL经常会遇到行列转换的问题,而Pandas有时也需要。让我们看看来自Kaggle比赛的数据集。census_start.csv文件:如您所见,这些是按年份保存的。如果有year和pct_bb这列就更好了,每一行都有对应的值吧?cols=sorted([colforcolinoriginal_df.columns\ifcol.startswith("pct_bb")])df=original_df[(["cfips"]+cols)]df=df.melt(id_vars="cfips",value_vars=cols,var_name="year",value_name="feature").sort_values(by=["cfips","year"])看看结果,这样是不是好多了:3.apply()很慢,我们上次介绍了time但是,最好不要使用此方法,因为它会遍历每一行并调用指定的方法。但是如果我们别无选择,有没有办法提高速度呢?您可以使用swifter或pandarallew等包来并行化该过程。更快的importpandasaspdimportswifterdeftarget_function(row):returnrow*10deftraditional_way(data):data['out']=data['in'].apply(target_function)defswifter_way(data):data['out']=data['in'].swifter.apply(target_function)Pandarallelimportpandasaspdfrompandarallelimportpandaralleldeftarget_function(row):returnrow*10deftraditional_way(data):data['out']=data['in'].apply(target_function)defpandarallel_way(data):pandarallel.initialize()data['out']=data['in'].parallel_apply(target_function)通过多线程,可以提高计算速度,当然如果有集群,最好使用dask或者pyspark4,nullvalue,int,Int64标准整型数据类型不支持null值,所以会自动转为浮点数。所以如果你的数据需要整数字段中的空值,考虑使用Int64数据类型,因为它会使用pandas.NA来表示空值。5.CSV、压缩还是镶木地板?尽可能选择实木复合地板。Parquet会保留数据类型,读取数据时无需指定dtype。parquet文件默认经过snappy压缩,占用磁盘空间小。来看看几个对比|文件|尺码|+------------------------+--------+|三胞胎_525k.csv|38.4MB||triplets_525k.csv.gzip|4.3MB||triplets_525k.csv.zip|4.5MB||triplets_525k.parquet|1.9MB|+----------------------------+--------+读取镶木地板需要额外的包,如pyarrow或fastparquet。chatgpt说pyarrow比fastparquet快,但是我在小数据集上测试的时候fastparquet比pyarrow快,但是这里推荐使用pyarrow,因为pandas2.0默认也是用这个的。6.value_counts()计算相对频率,包括获取绝对值、计数和除以总数是复杂的,但是使用value_counts可以更轻松地完成这项任务,并且该方法提供了包含或排除空值的选项。df=pd.DataFrame({"a":[1,2,None],"b":[4.,5.1,14.02]})df["a"]=df["a"].astype("Int64")print(df.info())print(df["a"].value_counts(normalize=True,dropna=False),df["a"].value_counts(normalize=True,dropna=True),sep="\n\n")这样是不是简单多了?7.Modin注意:Modin还处于测试阶段。pandas是单线程的,但Modin可以通过缩放pandas来加快工作流程,它在pandas可能变得非常慢或内存密集型导致OOM的较大数据集上特别有效。!pipinstallmodin[all]importmodin.pandasaspddf=pd.read_csv("my_dataset.csv")下面是modin官网的架构图,有兴趣的研究一下:8.如果你经常遇到复杂的如果你有semi-结构化数据,需要单独列出来,可以用这个方法:importpandasaspdregex=(r'(?P[A-Za-z\'\s]+),'r'(?P<author>[A-Za-z\s\']+),'r'(?P<isbn>[\d-]+),'r'(?P<year>\d{4}),'r'(?P<publisher>.+)')addr=pd.Series(["失落的阿马拉之城,OliviaGarcia,978-1-234567-89-0,2023,HarperCollins","炼金术士的女儿,MaxwellGreene,978-0-987654-32-1,2022,PenguinRandomHouse","TheLastVoyageoftheHMSEndeavour,JessicaKim,978-5-432109-87-6,2021,Simon&Schuster","《避暑山庄的幽灵》,伊莎贝拉·李,978-3-456789-12-3,2000年,麦克米伦出版社,“黑刺李庄园的秘密”,艾玛·陈,978-9-876543-21-0,2023,兰登书屋童书》])addr.str.extract(regex)9.读写能力剪贴板有些人不会使用一次,但有些人可能只是需要它,例如:当在分析中包含PDF文件中的表格时,通常的方法是复制数据,粘贴到Excel中,导出到csv文件,然后导入到熊猫。但是,这里有一个更简单的解决方案:pd.read_clipboard()。我们需要做的就是复制所需的数据并执行一个方法。可以边读边写,所以也可以使用to_clipboard()方法导出到剪贴板。但是记住,这里的剪贴板是你运行的python/jupyter宿主机的剪贴板,跨宿主机是不可能粘贴的,所以不要搞混了。10.数组列分为多列假设我们有这样一个数据集,这是一个相当典型的情况:importpandasaspddf=pd.DataFrame({"a":[1,2,3],"b":[4,5,6],"category":[["foo","bar"],["foo"],["qux"]]})#让我们增加数据帧中的行数df=pd...].apply(pd.Series)\.stack()\.str.get_dummies()\.groupby(level=0)\.sum())\.drop("category",axis=1)%timeitdummies_series_apply(df.copy())#5.96s±66.6msperloop(mean±std.dev.of7runs,1loopeach)sklearn'sMultiLabelBinarizerfromsklearn.preprocessingimportMultiLabelBinarizerdefsklearn_mlb(df):mlb=MultiLabelBinarizer()返回df.join(pd.DataFrame(mlb.fit_transform(df['category']),columns=mlb.classes_))\.drop("category",axis=1)%timeitsklearn_mlb(df.copy())#35.1ms±1.31ms每个循环(平均±std.dev.7次运行,每次10次循环)是否更快?我们还可以使用一般向量化操作对它们求和:defdummies_vectorized(df):returnpd.get_dummies(df.explode("category"),prefix="cat")\.groupby(["a","b"])\.sum()\.reset_index()%timeitdummies_vectorized(df.copy())#29.3ms±1.22msperloop(mean±std.dev.of7runs,10loopseach)使用第一种方法(非常在StackOverflow的答案中很常见)给出的结果非常慢,而其他两种优化方法的时间非常快。结论我希望每个人都能从这些技巧中学到新东西。重要的是要记住尽可能使用矢量化操作而不是apply()。此外,除了csv之外,还有其他有趣的数据集存储方式。不要忘记使用分类数据类型,它可以节省大量内存。谢谢阅读!https://avoid.overfit.cn/post/bf6e2fa626494a3789aa6b4d49657448作者:DmytroSamchuk</p> </div> </div> <div class="zuowen_sxy"> <div class="prev">上一篇:<a title="使用ADMT和PES实现windowAD账户跨域迁移-简介" href="/houduanjishu/171026.html">使用ADMT和PES实现windowAD账户跨域迁移-简介</a> </div> <div class="prev">下一篇:<a title="Python3.7发送邮件(完整版和简易版)" href="/houduanjishu/171028.html">Python3.7发送邮件(完整版和简易版)</a> </div> </div> <div class="related_about"> <div class="related_about_t"><code>10个Pandas另类数据处理技巧相关文章</code></div> <ul> <li><a href="/kejifunen/350085.html" target="_blank" title="【深度剖析】采取错误的做法! Moto360二代你不知道的另">【深度剖析】采取错误的做法! Moto360二代你不知道的另</a></li> <li><a href="/kejifunen/349089.html" target="_blank" title="2分钟看虚拟现实VR的10个历史时刻">2分钟看虚拟现实VR的10个历史时刻</a></li> <li><a href="/kejifunen/348361.html" target="_blank" title="D1智能手表世界杯纪念版发布!支持10个月超长续航">D1智能手表世界杯纪念版发布!支持10个月超长续航</a></li> <li><a href="/kejifunen/346749.html" target="_blank" title="购买移动VR耳机需要注意的10个方面">购买移动VR耳机需要注意的10个方面</a></li> <li><a href="/kejifunen/345541.html" target="_blank" title="高能警告!华米Amazfit手环的另类突破">高能警告!华米Amazfit手环的另类突破</a></li> <li><a href="/kejifunen/344909.html" target="_blank" title="谷歌眼镜还有一个大用处!另类狙击镜(图文)">谷歌眼镜还有一个大用处!另类狙击镜(图文)</a></li> <li><a href="/kejifunen/341864.html" target="_blank" title="从想法到IPO:回顾Netflix的10个制胜时刻">从想法到IPO:回顾Netflix的10个制胜时刻</a></li> <li><a href="/kejifunen/341789.html" target="_blank" title="10个颠覆性创业项目来了! RTE 2020实时互联网创业挑">10个颠覆性创业项目来了! RTE 2020实时互联网创业挑</a></li> <li><a href="/kejifunen/339039.html" target="_blank" title="张一鸣:实用主义者的另类浪漫">张一鸣:实用主义者的另类浪漫</a></li> <li><a href="/kejifunen/337775.html" target="_blank" title="猎豹移动2021年Q2财报:营收10个季度以来首次环比增长,">猎豹移动2021年Q2财报:营收10个季度以来首次环比增长,</a></li> <li><a href="/kejifunen/337085.html" target="_blank" title="10个月拓展260个城市重塑冷链运输格局的数字化平台瑞云冷链">10个月拓展260个城市重塑冷链运输格局的数字化平台瑞云冷链</a></li> <li><a href="/kejifunen/336340.html" target="_blank" title="助力疫情防控,耀明出租车在广州建设了10个线下防疫消毒点">助力疫情防控,耀明出租车在广州建设了10个线下防疫消毒点</a></li> <li><a href="/kejifunen/335543.html" target="_blank" title="2个月内更新了近10个主要功能,国内云端专业UI设计工具“即">2个月内更新了近10个主要功能,国内云端专业UI设计工具“即</a></li> <li><a href="/jishuluodi/331681.html" target="_blank" title="一年10个节日的日期和习俗是什么? ">一年10个节日的日期和习俗是什么? </a></li> <li><a href="/jishuluodi/331186.html" target="_blank" title="10个适合穷人的小企业? ">10个适合穷人的小企业? </a></li> <li><a href="/jishuluodi/328643.html" target="_blank" title="10个童话故事? ">10个童话故事? </a></li> <li><a href="/jishutupo/318049.html" target="_blank" title="对物联网未来的10个预测">对物联网未来的10个预测</a></li> <li><a href="/jishutupo/318011.html" target="_blank" title="关于云计算的10个神话">关于云计算的10个神话</a></li> <li><a href="/jishuluodi/317469.html" target="_blank" title="10个象征爱情的东西">10个象征爱情的东西</a></li> <li><a href="/jishuluodi/315939.html" target="_blank" title="中国春节的10个习俗和意义">中国春节的10个习俗和意义</a></li> </ul> </div> </div> <div class="main-right"> <div class="right_fix"> <div class="r_con"> <div class="r_title">最新推荐</div> <ul> <li><em>1</em><a href="/kejifunen/371050.html" title="这10个新功能应该会加入到未来的Android Wear系统" target="_blank">这10个新功能应该会加入到未来的Android Wear系统</a></li> <li><em>2</em><a href="/kejifunen/370187.html" title="美国重新定义可穿戴设备!另类“变形金刚”" target="_blank">美国重新定义可穿戴设备!另类“变形金刚”</a></li> <li><em>3</em><a href="/kejifunen/370088.html" title="关于AR你需要了解的10个关键数据" target="_blank">关于AR你需要了解的10个关键数据</a></li> <li><em>4</em><a href="/kejifunen/369325.html" title="2015年VR和AR最重要的10个发展" target="_blank">2015年VR和AR最重要的10个发展</a></li> <li><em>5</em><a href="/kejifunen/369060.html" title="生态链扩张!小米活塞耳机将如何拿出“另类”新品" target="_blank">生态链扩张!小米活塞耳机将如何拿出“另类”新品</a></li> <li><em>6</em><a href="/kejifunen/368660.html" title="微软智能手表概念图曝光 另类外观 表盘朝下 " target="_blank">微软智能手表概念图曝光 另类外观 表盘朝下 </a></li> <li><em>7</em><a href="/kejifunen/368098.html" title="华为手表!不同的DNA能否“开辟”另类智能手表之路" target="_blank">华为手表!不同的DNA能否“开辟”另类智能手表之路</a></li> <li><em>8</em><a href="/kejifunen/367830.html" title="LG心碎了!三星还推出了智能机械混合手表!另类概念只是为了扳" target="_blank">LG心碎了!三星还推出了智能机械混合手表!另类概念只是为了扳</a></li> <li><em>9</em><a href="/kejifunen/366370.html" title="惠普推出新款“另类”智能手表,注重传统而非高科技 " target="_blank">惠普推出新款“另类”智能手表,注重传统而非高科技 </a></li> <li><em>10</em><a href="/kejifunen/366282.html" title="【盘点】虚拟现实百家争鸣,可能被颠覆的10个行业" target="_blank">【盘点】虚拟现实百家争鸣,可能被颠覆的10个行业</a></li> </ul> </div> <div class="r_con"> <div class="r_title">猜你喜欢</div> <ul class="you_like"> <li><em>1</em><a href="/kejifunen/365136.html" title="Moto3602代评测+拆解! “奇怪”外观背后的另类想法" target="_blank">Moto3602代评测+拆解! “奇怪”外观背后的另类想法</a></li> <li><em>2</em><a href="/kejifunen/364416.html" title="【另类评测】Android遇上IOS!二代Moto360和i" target="_blank">【另类评测】Android遇上IOS!二代Moto360和i</a></li> <li><em>3</em><a href="/kejifunen/364091.html" title="【透视】Apple Watch在前面,Moto360在后面!" target="_blank">【透视】Apple Watch在前面,Moto360在后面!</a></li> <li><em>4</em><a href="/kejifunen/361515.html" title="智能手表吸引顾客必须具备的10个功能" target="_blank">智能手表吸引顾客必须具备的10个功能</a></li> <li><em>5</em><a href="/kejifunen/359140.html" title="2015年可穿戴设备发展的10个方向" target="_blank">2015年可穿戴设备发展的10个方向</a></li> <li><em>6</em><a href="/kejifunen/358887.html" title="真是太任性了!搭载iOS的华为Watch的另类体验(高清图片" target="_blank">真是太任性了!搭载iOS的华为Watch的另类体验(高清图片</a></li> <li><em>7</em><a href="/kejifunen/358882.html" title="目前这10个虚拟现实应用值得尝试" target="_blank">目前这10个虚拟现实应用值得尝试</a></li> <li><em>8</em><a href="/kejifunen/358181.html" title="【对比】汪峰闺蜜耳机!另类突破怎能不输给小米和索尼? " target="_blank">【对比】汪峰闺蜜耳机!另类突破怎能不输给小米和索尼? </a></li> <li><em>9</em><a href="/kejifunen/357380.html" title="关于Moto的10个细节360" target="_blank">关于Moto的10个细节360</a></li> <li><em>10</em><a href="/kejifunen/356772.html" title="可穿戴设备成功的10个因素" target="_blank">可穿戴设备成功的10个因素</a></li> <li><em>11</em><a href="/kejifunen/356371.html" title="【评测】从“有才又美”的另类角度解读华为荣耀手环零(附视频)" target="_blank">【评测】从“有才又美”的另类角度解读华为荣耀手环零(附视频)</a></li> <li><em>12</em><a href="/kejifunen/355073.html" title="为什么另类虚拟现实跑步机不受欢迎? " target="_blank">为什么另类虚拟现实跑步机不受欢迎? </a></li> <li><em>13</em><a href="/kejifunen/354121.html" title="2014年可穿戴行业10个关键词和4个时间节点" target="_blank">2014年可穿戴行业10个关键词和4个时间节点</a></li> <li><em>14</em><a href="/kejifunen/354063.html" title="10个视频带你看2016年最值得期待的10款VR游戏" target="_blank">10个视频带你看2016年最值得期待的10款VR游戏</a></li> <li><em>15</em><a href="/kejifunen/354018.html" title="微软智能手环! 1216元内置10个传感器" target="_blank">微软智能手环! 1216元内置10个传感器</a></li> <li><em>16</em><a href="/kejifunen/352756.html" title="智能手表从业者的10个反思时刻" target="_blank">智能手表从业者的10个反思时刻</a></li> <li><em>17</em><a href="/kejifunen/351660.html" title="【综合回顾】暴风魔镜4如何带领虚拟现实团队打造另类春节" target="_blank">【综合回顾】暴风魔镜4如何带领虚拟现实团队打造另类春节</a></li> <li><em>18</em><a href="/kejifunen/351649.html" title="投融资周报!两百亿并购,奇幻工场、雷神智能等完成融资! 10" target="_blank">投融资周报!两百亿并购,奇幻工场、雷神智能等完成融资! 10</a></li> <li><em>19</em><a href="/kejifunen/350785.html" title="另类视角的 Apple Watch " target="_blank">另类视角的 Apple Watch </a></li> <li><em>20</em><a href="/kejifunen/350622.html" title="给创业者的10个问题!浅谈电子墨水与可穿戴设备" target="_blank">给创业者的10个问题!浅谈电子墨水与可穿戴设备</a></li> </ul> </div> </div> </div> </div> <div class="related_article"></div> <div class="footer"> <p>Copyright © 2012-2022 程序源 版权所有<a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">豫ICP备2022028201号</a></p> <p>重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。 如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。</p> </div> <!-- 应用插件标签 start --> <!-- 应用插件标签 end --> </body> </html>