拆分熊猫系列并将其分配到单独的列中

时间:2020-08-27 21:30:25

标签: python-3.x pandas dataframe series

我有以下数据帧(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]
        .
        .
        .

有没有一种方法可以在熊猫中解决此问题,在这种情况下,您可以将字符串字段分为4个列(包括其列标签)来创建新的数据框?

1 个答案:

答案 0 :(得分:5)

让我们尝试.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