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

如何遍历Pandas DataFrame行并在每次迭代中创建单行DataFrame

解决Pandas遍历DataFrame并逐行生成单行列DataFrame的问题

我明白你的需求啦——想要遍历gmat这个DataFrame,每次循环用当前行生成一个新的DataFrame,还得覆盖掉之前的那个。先看看你给出的示例数据:

YEAR student score mail_id phone Loc
2012 abc 630 abc@xyz.com 1-800-000-000 pqr
2012 pqr 630 pqr@xyz.com 1-800-000-000 abc

你尝试用iterrows()的思路是对的,只是没写完,我来帮你补全并优化这个方案,同时再给你一个效率更高的替代方法。

方法一:用iterrows()实现(最直观)

iterrows()会返回每一行的索引和行数据(Series对象),我们需要把这个Series转成结构一致的单行列DataFrame,代码如下:

import pandas as pd

# 先构造你的示例DataFrame(如果已经存在可以跳过这部分)
data = {
    'YEAR': [2012, 2012],
    'student': ['abc', 'pqr'],
    'score': [630, 630],
    'mail_id': ['abc@xyz.com', 'pqr@xyz.com'],
    'phone': ['1-800-000-000', '1-800-000-000'],
    'Loc': ['pqr', 'abc']
}
gmat = pd.DataFrame(data)

# 遍历并生成单行列DataFrame
for idx, row in gmat.iterrows():
    # 方式1:将Series的值转为列表,指定原列名构造DataFrame
    df = pd.DataFrame([row.values], columns=gmat.columns)
    # 方式2:更简洁的写法——把Series转成列再转置成行
    # df = row.to_frame().T
    
    # 这里可以添加你的后续计算逻辑
    print(f"第{idx+1}次迭代的DataFrame:")
    print(df)
    print("---")

运行这段代码后,第一次循环df会是第一行数据的DataFrame,第二次循环就会被第二行的数据覆盖,完全符合你的要求。

方法二:用itertuples()实现(效率更高)

如果你的DataFrame数据量比较大,itertuples()的遍历效率比iterrows()要高不少,它返回的是命名元组,转成DataFrame的方式也很简单:

for row in gmat.itertuples(index=False):
    # 把命名元组转成列表,再构造DataFrame
    df = pd.DataFrame([list(row)], columns=gmat.columns)
    
    # 后续计算逻辑
    print("当前迭代的DataFrame:")
    print(df)
    print("---")

index=False参数是为了去掉默认返回的行索引,让我们只拿到行数据本身,这样构造出来的DataFrame和原结构完全一致。

需要注意的是,每次循环都会覆盖df变量,如果之后需要保留每一次的结果,可以考虑把df存入一个列表里,但按照你的需求,直接覆盖就没问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:09:50