python-3.x - 如何操作通过 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)
这里的具体目标是复制上面的示例,但为了提高效率,部署 itertuples 而不是 iterrows。但是,当切换到 itertuples 时,我不确定如何操作 pandas.core.frame.Pandas 对象,即以类似方式为每一行生成的 pandas 命名元组,以实现与操作 pandas 相同的目标。 iterrows 函数生成的 core.series.Series 对象。
这是想法:
for kwargs in df.itertuples():
kwargs.pop('D')
result = func(**kwargs)
当然,for 循环中的任何一行都不起作用,因为新的迭代方法产生了不同的对象。如何直接重写(我还没有找到等效的方法)或间接地实现相同的结果,而不放弃预期的效率增益。
谢谢。
解决方案
为什么不将 namedtuple 转换为 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)
推荐阅读
- powershell - 从 CSV 中的数字中删除逗号
- c++ - 为什么我需要三个嵌套的大括号来调用赋值运算符,将 const 引用到二维数组?
- php - PHP逐行读取CSV文件 - 比较上一行中的数据
- c# - 依赖注入循环项目依赖
- php - 具有依赖关系的 Symfony 验证器
- .htaccess - 如何从 http://www.olddomain.co.uk >> https://newdomain.uk 获得一个 301 重定向?
- python - 使用curve_fit的Python数据拟合
- python - 在客户端从 JSON 对象解析数据时出现问题
- javascript - 用java创建表单页面
- python - 不透明图像部分周围的轮廓