如何操作通过itertuples生成的命名元组,专门删除一个元素并从其余元素中生成字典



这个问题最好用一个例子来扩展:

import pandas as pd
import numpy as np
np.random.seed(1)
df = pd.DataFrame(np.random.randn(1000,4),columns=list('ABCD'))
def func(A,B,C):

return A + B + C
for index,kwargs in df.iterrows():

kwargs.pop('D')
result = func(**kwargs)

这里的具体目标是复制上面的示例,但为了提高效率,部署itertuple而不是iterrows。然而,当切换到iterraws时,我不确定如何操作pandas.core.frame.pandas对象,即以类似的方式为每一行生成的熊猫命名元组,以实现与iterraws函数生成的pandas.core系列对象的操作相同的目标。

想法如下:

for kwargs in df.itertuples():

kwargs.pop('D')
result = func(**kwargs)

当然,for循环中的两行都不起作用,因为新的迭代方法产生了不同的对象。如何在不放弃预期效率收益的情况下,直接(我还没有找到等效的方法(或间接地重写这一点以获得相同的结果。

谢谢。

为什么不将名称元组转换为dict?

wanted = [c for c in df.columns if c != 'D']
for row in df.loc[:, wanted].itertuples():
result = func(**row._asdict())

您还可以将数据帧转换为dict列表

wanted = [c for c in df.columns if c != 'D']
for kwargs in df.loc[:, wanted].to_dict('records'):
result = func(**kwargs)

最新更新