问题描述
我有以下数据帧(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,G]
.
.
.
有没有一种方法可以在熊猫中解决此问题,在这种情况下,您可以将字符串字段分为4个列(包括其列标签)来创建新的数据框?
解决方法
让我们尝试.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