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

如何将Pandas读取CSV的DataFrame转为带索引的OrderedDict并解决输出问题

解决方案

1. 实现带行号的输出效果

你用df.iterrows()遍历的时候,返回的第一个变量i就是当前行的索引(默认从0开始计数),只需要修改打印语句,在输出前拼接i+1即可实现从1开始的序号效果。
修改后的循环代码如下:

for i, row in df.iterrows():
    d = OrderedDict(zip(row.index.tolist(), row.tolist()))
    print(f"{i+1}. {d}")

2. zip()与tolist()的作用说明

  • tolist():是pandas对象的内置方法,作用是将pandas的Index、Series等专属数据结构转换为Python原生的列表类型:
    • row.index.tolist()会把当前行的列名索引转为列名字符串列表,例如['First Name', 'Last Name', 'Occupation', 'Age', 'Number']
    • row.tolist()会把当前行的Series数据转为对应值的列表,例如第一行对应['Kate', 'Rose', 'Teacher', 24, 87]
  • zip():是Python内置函数,接收多个可迭代对象作为参数,会将不同可迭代对象中相同位置的元素配对为元组,最终返回由这些元组组成的迭代器。这里刚好把列名列表和行值列表按位置配对,生成的键值对元组可以直接传入OrderedDict生成有序字典。

3. 修复调整后仅输出最后一行的问题

你的代码问题是print(d)的缩进错误,放在了for循环的外部:循环过程中每次都会用新行的内容覆盖变量d,直到循环结束后才打印,最终只会输出最后一行的结果。
只需要将print(d)缩进一层,放到for循环的代码块内即可,带行号的修改后代码如下:

import pandas as pd
from collections import OrderedDict

df = pd.read_csv('for_testing.csv')

def main():
    choice = input("type sth ")
    if choice == '1':
        for i, row in df.iterrows():
            d = OrderedDict(zip(row.index.tolist(), row.tolist()))
            print(f"{i+1}. {d}")

if __name__ == "__main__":
    main()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:01