矢量化eval快速-Python Numpy Pandas



我需要一种方法来矢量化eval语句,该语句循环通过引用数据帧(df_ref(,该引用数据帧具有iloc到源df(df(的字符串

以下是问题的代表:

import pandas as pd
dataValues = ['a','b','c']
df = pd.DataFrame({'values': dataValues})
df_list = ['df.iloc[0,0]','df.iloc[2,0]']
df_ref = pd.DataFrame({'ref':df_list})
#looping 10000 times just to replicate a the amount of times this operation 
#may run in a typical scenario
def help():
for i in range(10000):
for index,row in df_ref.iterrows():
eval(df_ref.ref[index])
%timeit help()

输出:

2.84 s ± 366 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

在你做出回应之前。。我的问题总是有一些动态引用,我必须在python中复制这些引用,所以更直接的路由可能无法解决我的特定问题。

谢谢你的帮助!

如前所述,首先提取索引,然后分割成整个内容:

def help1():
indexes = df_ref['ref'].str.extract('iloc[(d+),s*(d+)]').astype(int)
return df.to_numpy()[indexes[0], indexes[1]]

help1()
> array(['a', 'c'], dtype=object)
%timeit -n 1000 help1()
> 1.11 ms ± 89.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

相关内容

  • 没有找到相关文章

最新更新