我有 12 个 .csv
文件,其中包含获取的分类名称及其频率(获取每个名称的次数)。我创建了一个主 .txt
文件,其中列出了在 12 个文件中至少发现一次的所有独特分类单元。我需要以 csv 格式创建一个串联表,其中行的标题是每个文件的名称,列的标题是主 .txt 中列出的所有唯一分类单元
文件。该表必须填充每个 .csv
输入文件中每个分类单元旁边的频率。尽管主列表包含 12 个文件中可能的所有分类单元,但并非所有文件都包含所有分类单元。当类群丢失时,我需要放置“0”。
.csv
输入:
$cat file_1
1,Salmo salar
12,Solanum pennellii
18,Staphylococcus xylosus
...
$cat file_2
1,Salmo salar
14,Staphylococcus xylosus
123,Strongyloides stercoralis
...
$cat file_3
123,Solanum pennellii
11,Staphylococcus xylosus
41,Strongyloides stercoralis
...
.txt
主列表:
$cat master
Salmo salar
Solanum pennellii
Staphylococcus xylosus
Strongyloides stercoralis
...
.csv
输出(我需要的):
Sample,Salmo salar,Solanum pennellii,Staphylococcus xylosus,Strongyloides stercoralis
File_1,1,12,18,0
File_2,1,0,14,123
File_3,0,123,11,41
我之前尝试制作一个没有主列表的小型 python 脚本,并使用包含重复的类群名称而不是频率的 .tsv
输入文件。我无法获得显示每个文件缺失分类单元的表格,因此我决定创建一个主列表并折叠输入文件。我对 python 很陌生,所以任何帮助将不胜感激。
最佳答案
您根本不需要主文件。我只是动态生成最终表。假设您将输入文件名作为命令行参数传递给 Python 脚本:
import sys
from collections import defaultdict
data = defaultdict(dict) # { taxon: { filename: count } }
for filename in sys.argv[1:]:
with open(filename) as infile:
for line in infile:
count, taxon = line.rstrip().split(',')
data[taxon][filename] = count
现在您有了数据
,这是输出文件所需的一切。然后你可以像这样打印它:
taxa = data.keys()
print "Sample,{}".format(','.join(taxa))
for filename in sys.argv[1:]:
print filename,
for taxon in taxa:
count = data[taxon].get(filename, "0")
sys.stdout.write("," + count)
print
关于python - 根据多个 CSV 文件中找到的分类单元的频率创建一个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37107464/