如何将从 csv 文件中读取的数据帧打印成字典格式?

Posted

技术标签:

【中文标题】如何将从 csv 文件中读取的数据帧打印成字典格式?【英文标题】:How to print a dataframe which is read from a csv file into dictionary format? 【发布时间】:2021-12-30 09:30:27 【问题描述】:

我使用 Pandas 将 csv 文件中的数据转换为数据框,然后使用 Ordereddict 将数据框打印为字典格式。

但是,当我这样做时,每行的索引号都丢失了,是保留索引号还是无论如何要使用索引号达到相同的结果?

我不完全确定 zip() 和 tolist() 的部分,谁能解释它们的用法?

我的代码:

import pandas as pd
from collections import OrderedDict
import collections

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


for i, row in df.iterrows():
  d = OrderedDict(zip(row.index.tolist(), row.tolist()))
  print(d)

输出:

OrderedDict([('First Name', 'Kate'), ('Last Name', 'Rose'), ('Occupation', 'Teacher'), ('Age', 24), ('Number', 87)])
OrderedDict([('First Name', 'James'), ('Last Name', 'Smith'), ('Occupation', 'Cook'), ('Age', 35), ('Number', 487)])
OrderedDict([('First Name', 'Nick'), ('Last Name', 'Carter'), ('Occupation', 'Writer'), ('Age', 44), ('Number', 896)])
OrderedDict([('First Name', 'Ray'), ('Last Name', 'Johnson'), ('Occupation', 'Designer'), ('Age', 34), ('Number', 412)])
OrderedDict([('First Name', 'Jay'), ('Last Name', 'Law'), ('Occupation', 'Unemployed'), ('Age', 25), ('Number', 123)])

我希望输出是这样的:

1. OrderedDict([('First Name', 'Kate'), ('Last Name', 'Rose'), ('Occupation', 'Teacher'), ('Age', 24), ('Number', 87)])
2. OrderedDict([('First Name', 'James'), ('Last Name', 'Smith'), ('Occupation', 'Cook'), ('Age', 35), ('Number', 487)])
3. OrderedDict([('First Name', 'Nick'), ('Last Name', 'Carter'), ('Occupation', 'Writer'), ('Age', 44), ('Number', 896)])
4. OrderedDict([('First Name', 'Ray'), ('Last Name', 'Johnson'), ('Occupation', 'Designer'), ('Age', 34), ('Number', 412)])
5. OrderedDict([('First Name', 'Jay'), ('Last Name', 'Law'), ('Occupation', 'Unemployed'), ('Age', 25), ('Number', 123)])

编辑: 我注意到一个问题,当我尝试通过用户输入触发打印时,它只显示ordereddict 数据帧的最后一行,而不是整个ordereddict 数据帧:

新代码:

import pandas as pd
from collections import OrderedDict
import collections

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(d)


main()

新输出:

type sth 1
OrderedDict([('First Name', 'Jay'), ('Last Name', 'Law'), ('Occupation', 'Unemployed'), ('Age', 25), ('Number', 123)])

【问题讨论】:

【参考方案1】:

每次在循环中定义字典时,都会覆盖字典。您可以首先在循环之外定义一个空字典,然后在循环中为其分配值。使用OrderedDict,它应该按照您分配的顺序保持项目:

d = OrderedDict()
for i, row in df.iterrows():
    d[i] = list(zip(row.index.tolist(), row.tolist()))
print(d)

【讨论】:

感谢您的回答!但是,当我运行它时,我得到:``` OrderedDict([(0, ), (1, ), (2, ), ( 3, ), (4, )]) ``` @PypypieYum 尝试将list 放在zip 命令周围。请参阅我的更新答案。抱歉,在发布之前无法对此进行测试。 非常感谢!我注意到这些项目现在嵌入到一个 OrderedDict() 中,但我希望它们单独列出。另外,你知道为什么当我尝试让它由输入触发时,它只会列出最后一个 Ordereddict 行而不是整个数据框吗?

以上是关于如何将从 csv 文件中读取的数据帧打印成字典格式?的主要内容,如果未能解决你的问题,请参考以下文章

从 CSV 文件创建字典

Python多线程未获得所需的性能

读取csv字典变成str了怎么办

将从excel读取的科学数字转换为csv

从非修复标头开始的 csv 读取 pandas 数据帧

如何将从 .arff 文件加载的 arff 对象转换为数据帧格式?