访问collections.defaultdict的值

时间:2017-03-21 15:21:25

标签: python csv

我有一个csv文件,我想逐列阅读,因为我有这段代码:

from collections import  defaultdict
from csv import DictReader

columnwise_table = defaultdict(list)
with open("Weird_stuff.csv",'rU') as f:
    reader = DictReader(f)
    for row in reader:
        for col,dat in row.items():
            columnwise_table[col].append(dat)
#print(columnwise_table.items())  # this gives me everything 

print(type(columnwise_table[2]) # I'm look for smt like this 

我的问题是如何只获取一个特定列的所有元素?我没有使用conda,矩阵很大2400x980

更新

我有980列和超过2000行我需要使用列来处理文件说第1列[0]:feature1第2列[0]:j_ss01第50列:{{1等等  因为我无法使用列名访问dict,所以我想使用索引。这可能吗 ?

2 个答案:

答案 0 :(得分:1)

通过迭代row.items,您可以获得所有列。

如果您只希望通过索引号显示一个特定列,请改用csv.reader和列索引。

from csv import reader

col_values = []
# Column index number to get values from
col = 1

with open("Weird_stuff.csv",'rU') as f:
    reader = reader(f)
    for row in reader:
        col_val = row[col]
        col_values.append(col_val)

# contains only values from column index <col>
print(col_values)

答案 1 :(得分:1)

import csv
import collections

col_values = collections.defaultdict(list)
with open('Wierd_stuff.csv', 'rU') as f:
    reader = csv.reader(f)
    # skip field names
    next(reader)
    for row in csv.reader(f):
        for col, value in enumerate(row):
            col_values[col].append(value)

# for each numbered column you want...
col_index = 33  # for example
print(col_values[col_index])

如果您事先知道所需的列,只存储这些列可以为您节省一些空间......

cols = set(1, 5, 6, 234)

...
        for col, value in enumerate(row):
            if col in cols:
                col_values[col].append(value)