【问题标题】:Pandas: Change dataframe values based on dictionary and remove rows with no matchPandas:根据字典更改数据框值并删除不匹配的行
【发布时间】:2014-11-09 15:50:25
【问题描述】:

我有一个 pandas 数据框,其中一行包含以下格式的染色体:“chr1”、“chr2”...

我有一个字典可以将这些值转换为整数 - 例如:

HashTable = {"chr1" : 1, "chr2" : 2, "chr3" : 3, "chr4" : 4, "chr5" : 5, "chr6" : 6, "chr7" : 7, "chr8" : 8, "chr9" : 9, "chr10" : 10, "chr11" : 11, "chr12" : 12, "chr13" : 13, "chr14" : 14, "chr15" : 15, "chr16" : 16, "chr17" : 17, "chr18" : 18, "chr19" : 19, "chrX" : 20, "chrY" : 21, "chrM" : 22, 'chrMT': 23}

我想将数据框“Chrom”列中的染色体转换为整数值。还有一些我想从数据框中删除的字典中找不到的染色体。有没有简单的方法来做到这一点?

【问题讨论】:

    标签: python dictionary replace pandas


    【解决方案1】:

    您可以使用isin 过滤有效行,然后使用replace 替换值:

    import pandas as pd
    HashTable = {"chr1" : 1, "chr2" : 2, "chr3" : 3, "chr4" : 4, "chr5" : 5, "chr6" : 6, "chr7" : 7, "chr8" : 8, "chr9" : 9, "chr10" : 10, "chr11" : 11, "chr12" : 12, "chr13" : 13, "chr14" : 14, "chr15" : 15, "chr16" : 16, "chr17" : 17, "chr18" : 18, "chr19" : 19, "chrX" : 20, "chrY" : 21, "chrM" : 22, 'chrMT': 23}
    # A dummy DataFrame with all the valid chromosomes and one unknown chromosome
    df = pd.DataFrame({"Chrom": HashTable.keys() + ["unknown_chr"]})
    # Filter for valid rows
    df = df[df["Chrom"].isin(HashTable.keys())]
    # Replace the values according to dict
    df["Chrom"].replace(HashTable, inplace=True)
    print df
    

    输入(上面的虚拟df):

              Chrom
    0         chrMT
    1          chrY
    2          chrX
    3         chr13
    4         chr12
    5         chr11
    6         chr10
    7         chr17
    8         chr16
    9         chr15
    10        chr14
    11        chr19
    12        chr18
    13         chrM
    14         chr7
    15         chr6
    16         chr5
    17         chr4
    18         chr3
    19         chr2
    20         chr1
    21         chr9
    22         chr8
    23  unknown_chr
    

    输出数据帧:

       Chrom
    0     23
    1     21
    2     20
    3     13
    4     12
    5     11
    6     10
    7     17
    8     16
    9     15
    10    14
    11    19
    12    18
    13    22
    14     7
    15     6
    16     5
    17     4
    18     3
    19     2
    20     1
    21     9
    22     8
    

    如果结果值都是整数,则更改上面的replace 行以强制执行正确的dtype

    df["Chrom"] = df["Chrom"].replace(HashTable).astype(int)
    

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 2023-03-14
      • 2016-06-01
      • 2016-09-11
      相关资源
      最近更新 更多