【问题标题】:python csv to dictionary using csv or pandas modulepython csv到字典使用csv或pandas模块
【发布时间】:2017-11-05 13:04:06
【问题描述】:

我正在使用 Python 的 csv.DictReader 从 CSV 文件中读取值以创建字典,其中键是 CSV 中的第一行或标题,其他行是值。它按预期完美运行,我可以获得字典,但我只希望某些键在字典中,而不是所有列值。做这个的最好方式是什么?我尝试使用csv.reader,但我认为它没有这个功能。也许这可以使用 pandas 来实现?

这是我在 CSV 模块中使用的代码,其中Fieldnames 是我想保留在我的字典中的键。我意识到它不适用于我上面描述的内容。

import csv
with open(target_path+target_file) as csvfile:
    reader = csv.DictReader(csvfile,fieldnames=Fieldnames)
    for i in reader:
        print i

【问题讨论】:

  • @not_a_robot 我只想在最终字典中保留一些键。
  • 尝试使用带有参数“usecols”的“pandas.read_csv”方法

标签: python python-2.7 pandas


【解决方案1】:

您可以使用 pandas 非常简单地做到这一点。

import pandas as pd

# get only the columns you want from the csv file
df = pd.read_csv(target_path + target_file, usecols=['Column Name1', 'Column Name2'])
result = df.to_dict(orient='records')

来源:

【讨论】:

  • 感谢回复,但最终结果是字典列表吗?我想用一些键将每一行转换成一个字典。让我试试这个。谢谢:)
  • 以前没有,但是一旦您将列名更改为数据中的名称,更新后的答案应该对您有用。
  • 我也可以重命名一些现有的键名,比如我提供旧键和新键之间的映射吗?
  • 这是一个用于重命名现有键名的 SOA stackoverflow.com/questions/11346283/…
  • 再次感谢最后一件事,在 csv 文件中有些列的值是空的,所以在字典中它变成了nan。有没有办法让下摆默认为 0 用于 csv 中的空单元格.我应该问一个单独的问题吗?
【解决方案2】:

您可以使用to_dict 方法获取字典列表:

import pandas as pd

df = pd.read_csv(target_path+target_file, names=Fieldnames)

records = df.to_dict(orient='records')

for row in records:
    print row

to_dict 文档:

In [67]: df.to_dict?
Signature: df.to_dict(orient='dict')
Docstring:
Convert DataFrame to dictionary.

Parameters
----------
orient : str {'dict', 'list', 'series', 'split', 'records', 'index'}
    Determines the type of the values of the dictionary.

    - dict (default) : dict like {column -> {index -> value}}
    - list : dict like {column -> [values]}
    - series : dict like {column -> Series(values)}
    - split : dict like
      {index -> [index], columns -> [columns], data -> [values]}
    - records : list like
      [{column -> value}, ... , {column -> value}]
    - index : dict like {index -> {column -> value}}

      .. versionadded:: 0.17.0

    Abbreviations are allowed. `s` indicates `series` and `sp`
    indicates `split`.

Returns
-------
result : dict like {column -> {index -> value}}
File:      /usr/local/lib/python2.7/dist-packages/pandas/core/frame.py
Type:      instancemethod

【讨论】:

  • 非常感谢您的回复希望我可以接受多个答案。但是您能否告诉我是否有任何方法可以通过提供映射或其他方式重命名某些现有键?
  • names 属性允许您提供自己的列名。如果您的文件包含标题,只需包含header=0(即第一行)以确保您将标题替换为names 中您自己的映射。此外,如果您希望只保留特定列,可以在usecols 参数中指定它们。
  • 我想保留特定的列,但之后重命名这些列
  • 这正是names 参数允许您执行的操作。有关详细信息,请参阅pandas.read_csv 文档并尝试使用它以更好地掌握其功能。
  • 调查一下
猜你喜欢
  • 1970-01-01
  • 2022-07-04
  • 1970-01-01
  • 2021-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多