Pandas数据流中的分配

2024-10-02 08:25:13 发布

您现在位置:Python中文网/ 问答频道 /正文

例如,我有以下带有原始输入数据的DataFrame,并希望使用pandas函数链(“pipeline”)来处理它。特别是,我想重命名和删除列,并基于另一列添加其他列。在

    Gene stable ID  Gene name   Gene type   miRBase accession   miRBase ID
0   ENSG00000274494 MIR6832     miRNA       MI0022677           hsa-mir-6832
1   ENSG00000283386 MIR4659B    miRNA       MI0017291           hsa-mir-4659b
2   ENSG00000221456 MIR1202     miRNA       MI0006334           hsa-mir-1202
3   ENSG00000199102 MIR302C     miRNA       MI0000773           hsa-mir-302c

目前,我做了以下工作(有效):

^{pr2}$

结果:

    ENSG            gene_name   MI          mirna_name      species
0   ENSG00000274494 MIR6832     MI0022677   hsa-mir-6832    hsa
1   ENSG00000283386 MIR4659B    MI0017291   hsa-mir-4659b   hsa
2   ENSG00000221456 MIR1202     MI0006334   hsa-mir-1202    hsa
3   ENSG00000199102 MIR302C     MI0000773   hsa-mir-302c    hsa

是否可以将assign命令直接放入“管道”中? 必须分配一个额外的临时变量,感觉很麻烦。在这种情况下,我不知道应该如何引用相应的重命名列('mirna_name')。


Tags: nameid重命名mirgenemirnamirbasehsa
3条回答
result = df.drop("Gene type", axis=1).\
     rename(columns = {
        "Gene stable ID": "ENSG",
        "Gene name": "gene_name",
        "miRBase accession": "MI",
        "miRBase ID": "mirna_name"
     }).assign(species = df['miRBase ID'].str[:3])

您可以将重命名的列引用为df[column\u name]。在

您可以使用管道:

tmp_df = df.\
         drop("Gene type", axis=1).\
         rename(columns = {
            "Gene stable ID": "ENSG",
            "Gene name": "gene_name",
            "miRBase accession": "MI",
            "miRBase ID": "mirna_name"
         }).\
         pipe(lambda x: x.assign(species = x.mirna_name.str[:3]))

tmp_df
Out[365]: 
              ENSG gene_name         MI     mirna_name species
0  ENSG00000274494   MIR6832  MI0022677   hsa-mir-6832     hsa
1  ENSG00000283386  MIR4659B  MI0017291  hsa-mir-4659b     hsa
2  ENSG00000221456   MIR1202  MI0006334   hsa-mir-1202     hsa
3  ENSG00000199102   MIR302C  MI0000773   hsa-mir-302c     hsa

正如@Tom指出的,在这种情况下,不使用管道也可以做到:

^{pr2}$

我找到了pandas-ply,它为此引入了一个神奇的符号X

import pandas as pd 
from pandas_ply import X, install_ply
install_ply(pd)

df\
     .drop("Gene type", axis=1)\
     .rename(columns = {
        "Gene stable ID": "ENSG",
        "Gene name": "gene_name",
        "miRBase accession": "MI",
        "miRBase ID": "mirna_name"
     })\
     .ply_select("*", species = X.mirna_name.str[:3])

不过,如果能在本地的大熊猫身上找到这个,那就太好了。在

相关问题 更多 >

    热门问题