You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame与Pandas Series合并为可迭代的字典/JSON结构

解决方法:创建可迭代的特征-目标配对结构

嘿,我完全懂你的需求——你想要一个能通过for x_row, y_val in new_object直接遍历的结构,每次迭代拿到一行特征数据和对应的目标值对吧?其实不用纠结字典,有几个简单直接的方法能实现这个需求:

方法1:用zip()配对特征行与目标值(推荐)

这是最简洁高效的方式,直接把X的行迭代器和Y配对:

选项A:保留特征列名(返回namedtuple)

如果你希望每行特征能通过列名访问(比如x_row.feature1),可以用itertuples():

# 生成可迭代对象
new_object = zip(X.itertuples(index=False), Y)

# 遍历示例
for x_row, y_val in new_object:
    print("特征行:", x_row)
    print("对应目标值:", y_val)

index=False参数会去掉行索引,返回的x_row是一个namedtuple,每个属性对应特征列的名字。

选项B:返回numpy数组(更适合机器学习计算)

如果只需要纯数值数组,用to_numpy()更高效:

new_object = zip(X.to_numpy(), Y)

# 遍历示例
for x_array, y_val in new_object:
    print("特征数组:", x_array)
    print("对应目标值:", y_val)

方法2:合并DataFrame后用iterrows()遍历

如果你更习惯DataFrame的操作,可以先把X和Y合并回一个DataFrame,再用iterrows():

import pandas as pd

# 合并特征和目标列
combined_df = pd.concat([X, Y], axis=1)

# 生成可迭代对象
new_object = combined_df.iterrows()

# 遍历示例(注意iterrows返回的是(行索引, 行数据))
for idx, row in new_object:
    x_row = row.drop('target')  # 提取特征行
    y_val = row['target']       # 提取目标值
    print("特征行:", x_row)
    print("对应目标值:", y_val)

不过要注意,iterrows()返回的是Series,速度比zip()慢一些,更适合小型数据集。

为什么字典不适合你的需求?

字典的默认迭代逻辑是遍历键,即使你构造{i: (X.iloc[i], Y.iloc[i]) for i in range(len(X))}这样的字典,遍历的时候也需要用for k, (x, y) in dict.items(),不如上面的方法直接。而且字典的结构并不天然适配这种“一行特征对应一个目标值”的顺序迭代场景,所以用zip()或者DataFrame迭代器会更顺手。

内容的提问来源于stack exchange,提问作者pouchewar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:12:51