【问题标题】:Splitting a Pandas series and Assign Them into Separate Columns拆分 Pandas 系列并将它们分配到单独的列中
【发布时间】:2020-12-16 20:01:44
【问题描述】:

我有以下数据框(df):

mut   gene   pvalue    chrom
1:23456_A>G  0.005     chr1  
2:28484_A>G  0.0001    chr2
4:47629_A>G  0.05      chr4
3:88382_A>G  0.00001   chr3
10:88273_A>G 0.005    chr10

[30 rows x 4 columns]

我正在尝试从 df 的“mut”列创建四列及其列名标签,并将其分配给新创建的 df_new,如下所示

chr    st    ref   alt 
1     23456   A     G  
2     28484   A     G  
4     47629   A     G

生成的数据框(df_new)基本上是从 df 中提取 mut 列,然后分离字符串的每个部分,即:split(":") 然后 split("_") 最后 split(">") 我们最终得到原始字段 1 23456 A G 的 4 个部分,然后放入它们的列中。

这是我的尝试:

df_new["chr"], df_new["st"], df_new["ref"],    
df_new["alt"] = df.mut.str.split("[:_>]")

但我最终得到如下错误消息:

ValueError: too many values to unpack (expected 4)

一个简单的打印语句揭示了这行代码的结果:

 df.mut.str.split("[:_>]")

作为:

0   [1, 23456, A, G]  
1   [2, 28484, A, G]
        .
        .
        .

有没有办法在 pandas 中解决这个问题,您可以在其中创建一个新的数据框,将字符串字段分成 4 列并包含它们的列标签?

【问题讨论】:

    标签: python-3.x pandas dataframe series


    【解决方案1】:

    让我们试试.str.split(expand=True)

    df2=df.mut.str.split('[:_>]',expand=True)
    df2.columns=['chr','st','ref','alt']
    
    
    
     chr     st ref alt
    0   1  23456   A   G
    1   2  28484   A   G
    2   4  47629   A   G
    3   3  88382   A   G
    4  10  88273   A   G
    

    【讨论】:

    • 非常感谢您的快速回答,上面的代码是否认为是熊猫的好习惯?请原谅我是熊猫世界的新手!
    • 您能否进一步解释@aBiologist,不确定我是否清楚地了解了您的问题。原谅我
    • 代码运行良好,给了我想要的结果,谢谢你。我喜欢你的方法:简单明了,我想我对 pandas 良好实践的问题有点毫无意义,所以不要介意这个问题,再次感谢你的回答。
    猜你喜欢
    • 2017-11-02
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2020-12-21
    相关资源
    最近更新 更多