簡體   English   中英

Python - 如何使用列標題從CSV數據文件創建字典

[英]Python - How to Create Dictionary from CSV data file using column headings

我試圖創建一個函數,接受.csv數據文件的名稱和表示該文件中的列標題的字符串列表,並返回一個dict對象,每個鍵是一個列標題,相應的值是一個numpy數組數據文件的該列中的值。

我的代碼現在:

def columndata(filename, columns):
d = dict()
for col in columns:
with open(filename) as filein:
    reader = csv.reader(filein)
        for row in reader:
           if col in row:
               d.append(row)
return d

示例CSV如下所示:

test1,test2
3,2
1,5
6,47
1,4

列文件如下所示:

cols = ['test1', 'test2']

最終結果應該是這樣的字典:

{'test1':[3,1,6,1], 'test2':[2, 5, 4, 4]}

您可以使用DictReader將CSV數據解析為dict:

import csv
from collections import defaultdict


def parse_csv_by_field(filename, fieldnames):
    d = defaultdict(list)
    with open(filename, newline='') as csvfile:
        reader = csv.DictReader(csvfile, fieldnames)
        next(reader)  # remove header
        for row in reader:
            for field in fieldnames:
                d[field].append(float(row[field]))  # thanks to Paulo!
    return dict(d)

print(parse_csv_by_field('a.csv', fieldnames=['cattle', 'cost']))

一個簡單的熊貓解決方案:

import pandas as pd
df = pd.read_csv('filename', dtype='float') #you wanted float datatype
dict = df.to_dict(orient='list')

如果你想堅持常規python:

import csv
with open(filename, 'r') as f:
    l = list(csv.reader(f))
    dict = {i[0]:[float(x) for x in i[1:]] for i in zip(*l)}

或者,如果你是像亞當·斯密那樣的蟒蛇大師:

import csv
with open(filename, 'r') as f:
    l = list(csv.reader(f))
    dict = {header: list(map(float, values)) for header, *values in zip(*l)}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM