经典csv阅读器无法在术语 - 文档数组上运行的原因是csv文件的第一列是术语,而不是值。因此该文件具有以下语法:
"";"label1";"label2";"label3" ...
"term1";1;0;8;...
"term2";0;0;3;...
.................................
我需要构建一个字典,其键是label1,label3等...而值是列向量(这里它将是:dict [label1] - > 1,0,dict [label2] - > 0,0等),意思是这些术语对我来说完全没用。
我已经实现了一个类似这样的自定义解决方案:
....
keys = f.readline().split('";"') #1st line of the csv
keys = keys[1:] #skipping ""
zeros = [0] * len(keys) #dicts initial values will be 0
d = OrderedDict(zip(keys, zeros))
lines = f.readlines()
for line in lines:
...
splittting, stripping etc I get a list with values (eg: 1,0,8 - see example above)
...
for value in values:
....
然而,使用我的笔记本电脑读取8个csv文件(总计:12MB)需要90多分钟。
有没有人知道更有效的方法来解决这个问题?
答案 0 :(得分:1)
您仍然可以使用csv
模块将CSV文件读入内存,然后使用zip(*rows)
或itertools.izip(*rows)
转置行:
with open(somecsv, 'rb') as infile:
reader = csv.reader(infile, delimiter=';')
headers = next(reader)
data = list(reader)
data = dict(zip(headers, zip(*data)))
这将创建一个data
字典,其中标题为键,列为值。如果需要,您可以从字典中删除''
'条款'列。
对于您的输入示例,data
字典在执行上述代码后如下所示:
{'': ('term1', 'term2'), 'label1': ('1', '0'), 'label2': ('0', '0'), 'label3': ('8', '3')}
答案 1 :(得分:1)
import pandas as pd
data = pd.read_csv(filename)
my_dict = dict(data)
快捷方便!