【Python】11招对比Pandas双列求和
机器学习初学者
共 3786字,需浏览 8分钟
· 2022-06-28
公众号:尤而小屋
作者:Peter
编辑:Peter
大家好,我是Peter~
本文介绍的是通过11种方法来对比Pandas中DataFrame两列的求和
direct_add for_iloc iloc_sum iat apply(指定字段) apply(针对整个DataFrame) numpy_array iterrows zip assign sum
数据模拟
为了效果明显,模拟了一份5万条的数据,4个字段:
import pandas as pd
import numpy as np
data = pd.DataFrame({
"A":np.random.uniform(1,1000,50000),
"B":np.random.uniform(1,1000,50000),
"C":np.random.uniform(1,1000,50000),
"D":np.random.uniform(1,1000,50000)
})
data
11种函数
下面是通过11种不同的函数来实现A、C两列的数据相加求和E列
方法1:直接相加
把df的两列直接相加
In [3]:
def fun1(df):
df["E"] = df["A"] + df["C"]
方法2:for+iloc定位
for语句 + iloc方法的遍历循环
In [4]:
def fun2(df):
for i in range(len(df)):
df["E"] = df.iloc[i,0] + df.iloc[i, 2] # iloc[i,0]定位A列的数据
方法3:iloc + sum
iloc方法针对全部行指定列的求和:
0:第一列A 2:第三列C
In [5]:
def fun3(df):
df["E"] = df.iloc[:,[0,2]].sum(axis=1) # axis=1表示在列上操作
方法3:iat定位
for语句 + iat定位,类比于for + iloc
In [6]:
def fun4(df):
for i in range(len(df)):
df["E"] = df.iat[i,0] + df.iat[i, 2]
apply函数(只读两列)
apply方法 ,仅仅取出AC两列
In [7]:
def fun5(df):
df["E"] = df[["A","C"]].apply(lambda x: x["A"] + x["C"], axis=1)
apply函数(全部df)
针对前部的DataFrame使用apply方法
In [8]:
def fun6(df):
df["E"] = df.apply(lambda x: x["A"] + x["C"], axis=1)
numpy数组
使用numpy数组解决
In [9]:
def fun7(df):
df["E"] = df["A"].values + df["C"].values
iterrows迭代
iterrows()迭代每行的数据
In [10]:
def fun8(df):
for _, rows in df.iterrows():
rows["E"] = rows["A"] + rows["C"]
zip函数
通过zip函数现将AC两列的数据进行压缩
In [11]:
def fun9(df):
df["E"] = [i+j for i,j in zip(df["A"], df["C"])]
assign函数
通过派生函数assign生成新的字段E
In [12]:
def fun10(df):
df.assign(E = df["A"] + df["C"])
sum函数
在指定的A、C两列上使用sum函数
In [13]:
def fun11(df):
df["E"] = df[["A","C"]].sum(axis=1)
结果
调用11种函数,比较它们的速度:
统计每种方法下的均值,并整理成相同的us:
方法 | 结果 | 统一(us) |
---|---|---|
直接相加 | 626us | 626 |
for + iloc | 9.61s | 9610000 |
iloc + sum | 1.42ms | 1420 |
iat | 9.2s | 9200000 |
apply(只取指定列) | 666ms | 666000 |
apply(全部列) | 697ms | 697000 |
numpy | 216us | 216 |
iterrows | 3.29s | 3290000 |
zip | 17.9ms | 17900 |
assign | 888us | 888 |
sum(axis=1) | 1.33ms | 1330 |
result = pd.DataFrame({"methods":["direct_add","for_iloc","iloc_sum","iat","apply_part","apply_all",
"numpy_arry","iterrows","zip","assign","sum"],
"time":[626,9610000,1420,9200000,666000,697000,216,3290000,17900,888,1330]})
result
进行降序后的可视化:
result.sort_values("time",ascending=False,inplace=True)
import plotly_express as px
fig = px.bar(result, x="methods", y="time", color="time")
fig.show()
从结果中能够看到:
for循环是最耗时的,使用numpy数组最省时间,相差4万多倍;主要是因为Numpy数组使用的向量化操作 sum函数(指定轴axis=1)对效果的提升很明显
总结:循环能省则省,尽可能用Pandas或者numpy的内置函数来解决。
往期精彩回顾
适合初学者入门人工智能的路线及资料下载 (图文+视频)机器学习入门系列下载 中国大学慕课《机器学习》(黄海广主讲) 机器学习及深度学习笔记等资料打印 《统计学习方法》的代码复现专辑 机器学习交流qq群955171419,加入微信群请扫码
评论
Python列表知识应知应会
点击上方“Go语言进阶学习”,进行关注回复“Go语言”即可获赠从入门到进阶共10本电子书今日鸡汤只在此山中,云深不知处。一、前言 在Python程序开发中,列表(List)经常会使用。假设一个班里有50个学生现需要统计每一个学生的总成绩情况,如果不使用列
Go语言进阶学习
0
Python 字符串应该用双引号还是单引号?
转载来源:洪尔摩斯PyCharm升级至 2023.2版本后,经常弹出来一个提示问我要不要试一下Black formatter。试了一下,这个Black formatter 很有个性,特别喜欢换行。我的一个文件用PyCharm自带的代码整理器整理完之后是500行左右,然后再用Black整理就变成600
菜鸟学Python
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
五一Python抢票神器来了
还在为五一回家抢不到火车票发愁吗?今天介绍一个Python抢票神器,希望对你有帮助。Py12306是一个流行的开源项目,旨在帮助用户更便捷地查询和预订中国铁路12306网站上的火车票。以下是使用Py12306的基本步骤和一些注意事项:安装与环境准备安装Python: 确保你的系统中安装了Python
Python小二
1
PyPy为什么能让Python比C还快?一文了解内在机制
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源:机器之心「如果想让代码运行得更快,您应该使用 PyPy。」—— Python 之父 Guido van Rossum对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要。Pyth
菜鸟学Python
0
CleverCSV,一个神奇的 python 库!
我的小册:(小白零基础用Python量化股票分析小册) ,原价299,限时特价2杯咖啡,满100人涨10元。来源丨网络介绍CleverCSV 是一个基于 Python 的库,旨在提供比标准库 csv 更智能和灵活的方法来处理 CSV 文件。该库使用机器学习算法来探测 CSV 文件的正确拨号结构,从而
菜鸟学Python
0
python读取多个excel表多个sheet后映射匹配再分组计算、纵向拼接
大家好,我是飞奔的蜗牛ing。一、前言前几天在一个客户给到一单数据处理的 问题,需求是这样的:1.表“aa2020”中2020年数据需要按季度分成四个表。(1-3月、4-6月、7-9月、10-12月)2.表“2020年一季度”代表2020年一季度客户所对应的管理档位,需要把表中的档位导入附表“aa2
IT共享之家
0
五一抢票难,Python抢票脚本,火了!
大家好,今天继续聊聊科技圈发生的那些事。一、py12306话说回来,也快到五一了,不知道小伙伴们有没有出行计划呢?是选择回家,还是出去旅游呢?出行票的第一轮应该是放完了,我们就来赶赶末班车吧。py12306 这个项目其实就是一个抢票的工具,或许是临近出行购票热潮,这类项目又狠狠火了一把。工具的使用非
Jack Cui
7129