当前位置: 首页 > news >正文

网站能看出建设时间吗/微信小程序怎么制作自己的程序

网站能看出建设时间吗,微信小程序怎么制作自己的程序,建站之星网站模板,wordpress给图片添加alt属性目录 Pandas优化 1 迭代器使用itertuples() 和iterrows() 循环 Pandas优化 1 迭代器使用itertuples() 和iterrows() 循环 实际上可以通过pandas引入itertuples和iterrows方法可以使效率更快。这些都是一次产生一行的生成器方法,类似scrapy中使用的yield用法。 …

 

目录

Pandas优化

1 迭代器使用itertuples() 和iterrows() 循环


Pandas优化

1 迭代器使用itertuples() 和iterrows() 循环

实际上可以通过pandas引入itertuples和iterrows方法可以使效率更快。这些都是一次产生一行的生成器方法,类似scrapy中使用的yield用法。

.itertuples为每一行产生一个namedtuple,并且行的索引值作为元组的第一个元素。nametuple是Python的collections模块中的一种数据结构,其行为类似于Python元组,但具有可通过属性查找访问的字段。

.iterrows为DataFrame中的每一行产生(index,series)这样的元组。

虽然.itertuples往往会更快一些,但是在这个例子中使用.iterrows,我们看看这使用iterrows后效果如何。>>>

@timeit(repeat=3, number=100)def apply_tariff_iterrows(df):energy_cost_list = []for index, row in df.iterrows():# 获取用电量和时间(小时)energy_used = row['energy_kwh']hour = row['date_time'].hour# 添加cost列表energy_cost = apply_tariff(energy_used, hour)energy_cost_list.append(energy_cost)df['cost_cents'] = energy_cost_list>>> apply_tariff_iterrows(df)Best of 3 trials with 100 function calls per trial:Function `apply_tariff_iterrows` ran in average of 0.713 seconds.

语法方面:这样的语法更明确,并且行值引用中的混乱更少,因此它更具可读性。

在时间收益方面:快了近5倍! 但是,还有更多的改进空间。我们仍然在使用某种形式的Python for循环,这意味着每个函数调用都是在Python中完成的,理想情况是它可以用Pandas内部架构中内置的更快的语言完成。

Pandas的 .apply()方法

我们可以使用.apply方法而不是.iterrows进一步改进此操作。Pandas的.apply方法接受函数(callables)并沿DataFrame的轴(所有行或所有列)应用它们。在此示例中,lambda函数将帮助你将两列数据传递给apply_tariff()

>>> @timeit(repeat=3, number=100)
... def apply_tariff_withapply(df):
...     df['cost_cents'] = df.apply(
...         lambda row: apply_tariff(
...             kwh=row['energy_kwh'],
...             hour=row['date_time'].hour),
...         axis=1)
...
>>> apply_tariff_withapply(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_withapply` ran in average of 0.272 seconds.

.apply的语法优点很明显,行数少,代码可读性高。在这种情况下,所花费的时间大约是.iterrows方法的一半。

但是,这还不是“非常快”。一个原因是.apply()将在内部尝试循环遍历Cython迭代器。但是在这种情况下,传递的lambda不是可以在Cython中处理的东西,因此它在Python中调用,因此并不是那么快。

如果你使用.apply()获取10年的小时数据,那么你将需要大约15分钟的处理时间。如果这个计算只是大型模型的一小部分,那么你真的应该加快速度。这也就是矢量化操作派上用场的地方。

 

使用Numpy继续加速

Pandas SeriesDataFrames是在NumPy库之上设计的。这为你提供了更多的计算灵活性,因为Pandas可以与NumPy阵列和操作无缝衔接。

NumPy的 digitize() 函数类似于Pandas的cut(),因为数据将被分箱,但这次它将由一个索引数组表示,这些索引表示每小时所属的bin。然后将这些索引应用于价格数组:

@timeit(repeat=3, number=100)
def apply_tariff_digitize(df):prices = np.array([12, 20, 28])bins = np.digitize(df.index.hour.values, bins=[7, 17, 24])df['cost_cents'] = prices[bins] * df['energy_kwh'].values>>> apply_tariff_digitize(df)
Best of 3 trials with 100 function calls per trial:
Function `apply_tariff_digitize` ran in average of 0.002 seconds.
  • 尝试尽可能使用矢量化操作,而不是在df 中解决for x的问题。如果你的代码是许多for循环,那么它可能更适合使用本机Python数据结构,因为Pandas会带来很多开销。
  • 如果你有更复杂的操作,其中矢量化根本不可能或太难以有效地解决,请使用.apply方法。
  • 如果必须循环遍历数组(确实发生了这种情况),请使用.iterrows()或.itertuples()来提高速度和语法。
  • Pandas有很多可选性,几乎总有几种方法可以从A到B。请注意这一点,比较不同方法的执行方式,并选择在项目环境中效果最佳的路线。
  • 一旦建立了数据清理脚本,就可以通过使用HDFStore存储中间结果来避免重新处理。
  • 将NumPy集成到Pandas操作中通常可以提高速度并简化语法。
http://www.lbrq.cn/news/834049.html

相关文章:

  • windows.net做网站/今日热点新闻头条国内
  • 广州手机网站建设价格/semantic scholar
  • 找大学生做家教的网站/郑州seo网站关键词优化
  • 环境设计排版素材网站/最有效的线下推广方式
  • 网站设计抄袭/什么是互联网营销
  • 网站建设合同甲乙双方怎么确定/最快新闻资讯在哪看
  • 慈溪网站建设哪家好/湖南seo优化公司
  • python做软件的网站/海外营销推广服务
  • 阿里云有域名之后怎么建设网站/福州seo招聘
  • 购物网站的搜索框用代码怎么做/seo范畴有哪些
  • 网站建设设计 飞沐/中国培训网官网
  • 哪个网站可以免费做推广/线上推广费用
  • 网站安装步骤页面/网店怎么推广和宣传
  • 百度网站如何做运营/泉州网站关键词排名
  • 黄骅市在哪里/网站快速排名优化
  • 网站建设和建议/2022年新闻大事
  • 雄安建站服务/竞价如何屏蔽恶意点击
  • 公众号制作网页/百度爱采购关键词优化
  • wordpress上传后如何访问/合肥seo按天收费
  • 青海住房建设厅网站/百度收录什么意思
  • wordpress 博客搭建/免费使用seo软件
  • 电子商务微网站制作/合肥seo网络优化公司
  • 成都生活家装饰公司总部电话/seo教程技术
  • ps做素材下载网站有哪些/站长工具官网
  • 在线做任务的网站/百度营销网页版
  • 兰州网站程序建设/百度网页版进入
  • wordpress avada 加速/佛山旺道seo
  • 深圳市官网网站建设哪家好/免费seo搜索优化
  • 长春做企业网站多少钱/免费发布信息网站大全
  • 哪个网站做兼职可靠/淘宝引流推广怎么做
  • 用线性代数推导码分多址(CDMA)
  • [Linux]如何設置靜態IP位址?
  • CentOS7下的ElasticSearch部署
  • .NET Framework版本信息获取(ASP.NET探针),获取系统的.NET Framework版本
  • 7.16 Java基础 | 集合框架(上)
  • Taro.getRandomValues() 用法详解