如何专门操作通过 itertuples 生成的命名元组以删除元素并从剩余元素生成字典?
How can I manipulate a named tuple produced via itertuples specifically to remove an element and produce a dictionary from the remaining elements?
这个问题最好用一个例子来扩展:
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)
这里的具体目标是复制上面的例子,但是部署itertuples而不是iterrows,以提高效率。但是,当切换到 itertuples 时,我不确定如何操作 pandas.core.frame.Pandas 对象,即以类似的方式为每一行生成的 pandas 命名元组,以实现与操作相同的目标pandas.core.series.Series iterrows 函数生成的对象。
想法是这样的:
for kwargs in df.itertuples():
kwargs.pop('D')
result = func(**kwargs)
当然,for 循环中的两行都不起作用,因为新的迭代方法产生了不同的对象。如何在不放弃预期的效率增益的情况下直接(我还没有找到等效的方法)或间接地重写以获得相同的结果。
谢谢。
为什么不将 namedtuple 转换为字典?
wanted = [c for c in df.columns if c != 'D']
for row in df.loc[:, wanted].itertuples():
result = func(**row._asdict())
您还可以将数据框转换为字典列表
wanted = [c for c in df.columns if c != 'D']
for kwargs in df.loc[:, wanted].to_dict('records'):
result = func(**kwargs)
这个问题最好用一个例子来扩展:
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)
这里的具体目标是复制上面的例子,但是部署itertuples而不是iterrows,以提高效率。但是,当切换到 itertuples 时,我不确定如何操作 pandas.core.frame.Pandas 对象,即以类似的方式为每一行生成的 pandas 命名元组,以实现与操作相同的目标pandas.core.series.Series iterrows 函数生成的对象。
想法是这样的:
for kwargs in df.itertuples():
kwargs.pop('D')
result = func(**kwargs)
当然,for 循环中的两行都不起作用,因为新的迭代方法产生了不同的对象。如何在不放弃预期的效率增益的情况下直接(我还没有找到等效的方法)或间接地重写以获得相同的结果。
谢谢。
为什么不将 namedtuple 转换为字典?
wanted = [c for c in df.columns if c != 'D']
for row in df.loc[:, wanted].itertuples():
result = func(**row._asdict())
您还可以将数据框转换为字典列表
wanted = [c for c in df.columns if c != 'D']
for kwargs in df.loc[:, wanted].to_dict('records'):
result = func(**kwargs)