使用动态密钥数python解析csv

2024-04-25 22:45:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个脚本,从csv读取数据并将其放入dict。我的数据如下:

firstName    lastName    skill
alice        sparks      artist
mark         peters      sports
bob          stones      teacher
Chelsea
chester                  sports

以此类推,数据是csv,这意味着在上面的示例中,空格实际上是逗号

我想将这些数据按列方式解析为csv,最后的dict必须如下所示:

{'firstName': ['alice', 'mark', 'bob'], 'lastName': ['sparks', 'peters', 'stones'], 'skill': ['artist', 'sports', 'teacher']}

理论上:

  1. 第一行成为dict中的键
  2. 该特定列中的其他行成为一个值数组
  3. 键的数量可能在2-40之间变化,因此如果可能的话,它应该是动态的(自动检测)。你知道吗
  4. 在示例中,与其他列相比,这些列的条目可能较少

这在python中是可能的吗?你知道吗

我在网上搜索了所有得到基于行的结果的地方,但我需要按列搜索,并将其放入一个数组中。你知道吗


Tags: csv数据artistfirstnamedictskillbobmark
3条回答

使用csv.DictReader()dictionary.setdefault()。你知道吗

代码:

csvf = csv.DictReader(open("test.csv","r"))

d = {}
for row in csvf:
    for header, item in row.items():
        d.setdefault(header, []).append(item)

输出:

{'firstName': ['alice', 'mark', 'bob', 'Chelsea', 'chester'],
 'lastName': ['sparks', 'peters', 'stones', '', ''],
 'skill': ['artist', 'sports', 'teacher', '', 'sports']}

DictReader()(header, row[i])的形式返回一个OrderedDictionary数组,这是您用例的完美前言。当您遍历每一行时,您所需要的只是一个默认项类型为listappend的dctionary。你知道吗

一种方法是使用熊猫数据帧的to_dict方法:

import pandas as pd

df = pd.read_csv('test.csv')
d = df.to_dict('list')

你也可以用熊猫来做这个:

# Convert DataFrame to Dictionary 
df_dict = df.to_dict()

# Now convert it to list of values 
for key,value in df_dict:
df_dict[key] = [value for key,value in df_dict[key].items()]

# Or you can directly use:
df_dict = df.to_dict("list")

希望这有帮助:)

相关问题 更多 >