【问题标题】:Using apply in pandas take long time in data frame在 pandas 中使用 apply 在数据框中需要很长时间
【发布时间】:2021-09-22 13:26:48
【问题描述】:

我正在尝试在数据框中使用应用功能。

下面是示例数据框。

import pandas as pd
from CoolProp.HumidAirProp import HAPropsSI

df =pd.DataFrame()
df['T'] = [23,35,55]
df ['RH'] = [50,70,35]
df['H']= df.apply(lambda x: HAPropsSI('H','T',x ['T']+273.15, 'P',101325,'R',x ['RH']/100), axis = 1)

实际的数据框包含 400,000 行和 8 列。当我在我的实际数据框中应用上述功能时,需要很长时间才能完成。有没有其他方法可以提高计算速度?

更新

我尝试按如下方式使用验证:

df ['Enthalpy'] = np.vectorize(HAPropsSI) ('H','T',df ['T']+273.15, 'P',101325,'R',df ['RH']/100)

它显示以下错误:

TypeError: Numerical inputs to HAPropsSI must be ints, floats, lists, or 1D numpy arrays.

函数的输入如下:

HAPropsSI('H',T',x ['T']+273.15,P',101325,'R',x ['RH']/100)

第一个参数,H是我要找的参数。

第二个参数,T是需要输入参数的类型,第三个参数是输入参数T的值。

第三个和第四个代表输入参数的类型和它的值。 类似的适用于第五和第六。

【问题讨论】:

  • 你研究过多线程apply 吗?
  • 还没有。谢谢。
  • 为什么不在df numpy 值上直接使用HAPropsSI?像 df["T"].values + 273.15... 在我的测试中工作并且速度快了一点
  • 你应用的函数是做什么的,你能向量化操作吗?
  • 如果可能的话,您应该重写HAPropsSI,使其直接作用于数据向量或数据帧,而不是单个数字。

标签: python pandas apply


【解决方案1】:

您是否尝试过矢量化您的函数?

我会在这里推荐this question的答案,它很好地解释了“假”和“真”矢量化的优点。

【讨论】:

  • 我试过了,请在更新后的帖子中查看错误。
猜你喜欢
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 2018-09-15
  • 2019-04-10
  • 1970-01-01
  • 2019-01-28
相关资源
最近更新 更多