【发布时间】:2017-11-11 21:24:34
【问题描述】:
我目前正在处理两个包含数值数据的大型 csv 文件。一种这样的 csv,我们称之为 X,完全由测试对象的数字数据组成。 a 的列排列为健康测量值,如下所示 (id, v1,v2,v3,v4)。我正在尝试获取这些信息并创建一个列表列表,其中每个列表都包含一个人的信息,即以这种方式:
X=[['1','a','b','c','d'],
['1','e','f','g','h'],
['2','i','j','k','l'],
['3','m','n','o','p']]
listoflists=[ [['1','a','b','c','d'],['1','e','f','g','h']], #first row
['2','i','j','k','l'], #second
['3','m','n','o','p'] ] #third
(如果我应该编辑格式,请告诉我:我想将 X 显示为列以提高可读性。在列表列表中,我刚刚用完了空间,所以 listolists = [ a,b,c],其中 a 是第一行,b是第二行,c是第三行 我已经尝试了一些效果,但我最大的问题是我不确定在哪里创建具有匹配数据的实体列表,然后将其附加到“主列表”。
#create a set that holds the values of the subject ids.
ids=list(set([item[0] for item in X]))
#create the list of lists i want
listolists=[]
for value in ids:
listolists.append(sublist)
for i in range(len(X))
sublist=[] #I'm not sure where to create sublists of
#matching data and append to listolists
if value == X[i][0]
sublist.append(X[i]
感谢所有帮助。谢谢。
【问题讨论】:
-
IDs是否保证是连续的 - 如果是 - 你可以使用itertools.groupby- 如果不是 - 你可以使用collections.defaultdict... -
感谢您的回复!他们就是这种情况!我一直在寻找一种更通用的方法来解决数据不太好的情况。
-
不太清楚你所说的“一般方式”是什么意思 -
[list(g) for k, g in itertools.groupby(X, lambda L: L[0])]应该可以吗? -
对于 Python 中 CSV 文件的任何此类工作,您应该查看
pandas- 相同的groupby(column_name)存在那里,但它使处理数据更加容易 -
我的错。我的意思是以防万一我“排序”的 id 或任何变量不是连续的,或者如果我想根据除相等性以外的其他条件构建一个列表。
标签: list python-3.x csv iteration