【发布时间】:2016-12-21 16:54:18
【问题描述】:
我有一个大型 csv 文件,其中包含代表几种不同物种的采样病原体的信息。我想按物种分割这个 csv 文件,所以每个物种都有一个 csv 文件。文件中的数据没有任何特定的顺序。我的 csv 文件如下所示:
maa_2015-10-07_15-15-16_5425_manifest.csv,NULL,ERS044420,EQUI0208,1336,Streptococcus equi,15/10/2010,2010,Belgium,Belgium
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852528,2789STDY5834916,154046,Hungatella hathewayi,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852530,2789STDY5834918,33039,Ruminococcus torques,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852533,2789STDY5834921,40520,Blautia obeum,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852535,2789STDY5834923,1150298,Fusicatenibacter saccharivorans,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852537,2789STDY5834925,1407607,Fusicatenibacter,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852540,2789STDY5834928,39492,Eubacterium siraeum,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852544,2789STDY5834932,292800,Flavonifractor plautii,2013,2013,United Kingdom,UK
maa_2015-09-28_13-07-45_0098_manifest.csv,NULL,ERS852551,2789STDY5834939,169435,Anaerotruncus colihominis,2013,2013,United Kingdom,UK
maa_2015-10-07_15-15-16_5425_manifest.csv,NULL,ERS044418,EQUI0206,1336,Streptococcus equi,05/02/2010,2010,Belgium,Belgium
maa_2015-10-07_15-15-16_5425_manifest.csv,NULL,ERS044419,EQUI0207,1336,Streptococcus equi,29/07/2010,2010,Belgium,Belgium
该物种的名称在索引 5 处。
我最初尝试过这个:
import csv
from itertools import groupby
for key, rows in groupby(csv.reader(open("file.csv")),
lambda row: row[5]):
with open("%s.csv" % key, "w") as output:
for row in rows:
output.write(",".join(row) + "\n")
但这失败了,因为数据不是按物种排序的,并且输出没有附加争论(我知道),所以每次脚本遇到它已经拥有的物种的新条目时写入文件会覆盖第一个条目。
有没有一种简单的方法可以按物种对数据进行排序,然后执行上述脚本,或者有一种方法可以将上述脚本的输出附加到文件而不是覆盖它?
另外,我希望每个输出文件都以它们包含的物种命名。
谢谢。
【问题讨论】:
-
您可以使用 pandas 轻松完成此操作,请参阅 stackoverflow.com/questions/37683085/… 和 stackoverflow.com/questions/40789383/…
-
它应该可以工作;
groupby()已经按键分组,无论顺序如何。你遇到了什么错误?