将csv转换为多维数组

时间:2014-03-27 09:34:39

标签: python arrays r matlab csv

我有一个包含以下数据的csv:

"Store","Dept","Year","Week","Sales"
10,21,2,11,10908
11,30,2,12,12279
11,33,2,13,11061
12,81,2,14,12288
32,70,2,15,9950

并希望获得一个多维数组,以便我可以轻松调用:

Sales[store, dept, year, week]

例如,Sales[10,21,2,11] = 10908

任何语言都可以。最好是Python,Matlab或R.

不知怎的,我找不到解决方案。我一直在努力让它在R中运行,到目前为止没有成功(refer)。由于我不关心语言,我在更广泛的意义上提出这个问题。

1 个答案:

答案 0 :(得分:1)

如果我理解你的话,这就是你要求的 - python版本。它不是最好的编码,但基本的想法是add函数以递归方式填充字典字典

import csv


def add(h, *args):
    """
    >>> add({},1,2,4,8)
    {1: {2: {4: 8}}}
    """
    if len(args) == 2:
        h[args[0]] = args[1]
        return h
    if not(args[0] in h.keys()):
        h[args[0]] = {}
    add(h[args[0]], *args[1:])
    return h


if __name__ == "__main__":
    hoh = {}
    with open('data.csv', 'rb') as csvfile:
        spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
        headers = spamreader.next()
        for row in spamreader:
            print ', '.join(row)
            add(hoh, *row)
    import pprint
    pprint.pprint(hoh)

PS。我使用h和hoh作为变量名的原因是我认为它们是“哈希”,这就是perl和awk中这种类型的关联数组。对不起。