拆分 Pandas 系列并将它们分配到单独的列中

aBi*_*ist 2 series dataframe python-3.x pandas

我有以下数据框(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]
Run Code Online (Sandbox Code Playgroud)

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

chr    st    ref   alt 
1     23456   A     G  
2     28484   A     G  
4     47629   A     G
Run Code Online (Sandbox Code Playgroud)

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

这是我的尝试:

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

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

ValueError: too many values to unpack (expected 4)
Run Code Online (Sandbox Code Playgroud)

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

 df.mut.str.split("[:_>]")
Run Code Online (Sandbox Code Playgroud)

作为:

0   [1, 23456, A, G]  
1   [2, 28484, A, G]
        .
        .
        .
Run Code Online (Sandbox Code Playgroud)

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

wwn*_*nde 6

咱们试试吧 .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
Run Code Online (Sandbox Code Playgroud)