Pandas 表格结构蛇

Pandas 表格结构蛇,pandas,snakemake,Pandas,Snakemake,我试图构建一个蛇形管道,其中处理过的文件及其参数在一个特定的环境中定义 在我的最小示例中,文件夹结构如下所示 ├── data │   ├── name1 │   ├── name2 │   ├── name3 │   └── name4 ├── output ├── samples.tsv └── Snakefile 我想将不同数量的文件“name1”、“name2”和“name3”(不是“name4”)复制到输出文件夹中。金额在sample.tsv中定义 fileName param

我试图构建一个蛇形管道,其中处理过的文件及其参数在一个特定的环境中定义

在我的最小示例中,文件夹结构如下所示

├── data
│   ├── name1
│   ├── name2
│   ├── name3
│   └── name4
├── output
├── samples.tsv
└── Snakefile
我想将不同数量的文件“name1”、“name2”和“name3”(不是“name4”)复制到输出文件夹中。金额在sample.tsv中定义

fileName    parameter
name1   4
name2   6
name3   7
我想蛇形文件的基本结构应该有点像这样

import pandas as pd
samples = pd.read_table("samples.tsv").set_index("fileName", drop=False)

rule copy:
    input:
        "data/{<file name X>}"
    output:
        "output/{<file name X>}_cut"
    shell:
        "head -n {parameter of X} {input} > {output} "
将熊猫作为pd导入
samples=pd.read_表(“samples.tsv”)。set_索引(“fileName”,drop=False)
规则副本:
输入:
“数据/{}”
输出:
“输出/{}\u切”
外壳:
“head-n{X}{input}>{output}的参数”

但我不知道如何将“示例”中的信息解析到规则中。

将规则
all
添加为文件中的第一条规则:

规则所有:
输入:展开(“输出/{filenameX}\u剪切”,filenameX=samples)

此规则将收集所有必需的目标作为管道的目标,然后Snakemake将自动为每个文件分配一个
规则副本的实例。

将规则
all
添加为文件中的第一条规则:

规则所有:
输入:展开(“输出/{filenameX}\u剪切”,filenameX=samples)

此规则将收集所有必需的目标作为管道的目标,然后Snakemake将自动为每个文件分配一个
规则副本的实例。

要扩展Dimitry的答案,您可能需要在规则中添加一个lambda函数,将每个文件名链接到其参数在样本表中给出。例如:

import pandas as pd
samples = pd.read_table("samples.tsv").set_index("fileName", drop=False)

rule all:
    input:
        expand('output/{fileName}_cut', fileName= samples.fileName),

rule copy:
    input:
        "data/{fileName}"
    output:
        "output/{fileName}_cut"
    params:
        n= lambda wc: samples[samples.fileName == wc.fileName].parameter.iloc[0],
    shell:
        "head -n {params.n} {input} > {output}"

要扩展Dimitry的答案,您可能需要在规则中添加一个lambda函数,该函数将每个文件名链接到示例工作表中给出的参数。例如:

import pandas as pd
samples = pd.read_table("samples.tsv").set_index("fileName", drop=False)

rule all:
    input:
        expand('output/{fileName}_cut', fileName= samples.fileName),

rule copy:
    input:
        "data/{fileName}"
    output:
        "output/{fileName}_cut"
    params:
        n= lambda wc: samples[samples.fileName == wc.fileName].parameter.iloc[0],
    shell:
        "head -n {params.n} {input} > {output}"