Python 在多个列中拆分以逗号分隔的值
我有以下数据集Python 在多个列中拆分以逗号分隔的值,python,pandas,split,Python,Pandas,Split,我有以下数据集 Chr Position Name AD 1 866511 A 13,21 1 881627 A 28,33 2 1599812 B 67,25 我需要将广告栏分为三栏[REF,ALT1,ALT2]。 当每行AD只有两个值时,我仍然需要用NaN值填充ALT2列
Chr Position Name AD
1 866511 A 13,21
1 881627 A 28,33
2 1599812 B 67,25
我需要将广告栏分为三栏[REF,ALT1,ALT2]
。
当每行AD只有两个值时,我仍然需要用NaN值填充ALT2列
如果AD包含具有三个值的行,则以下代码有效
df['REF'], df['ALT1'], df['ALT2'] = df['AD'].str.split(',', 2).str
但是,在某些情况下,对于每一行,数据集在列AD
中只包含两个值,当我运行同一行时,会收到以下错误消息:
ValueError:没有足够的值来解包(预期3个,得到2个)
在这种情况下,我希望第三列仍然是
ALT2
,并用NaN
值填充它。有什么建议吗?感谢愿意提供帮助的任何人。您可以将参数expand
设置为True
,然后使用以下工具执行此操作:
df['REF'], df['ALT1'], df['ALT2'] = df.AD.str.split(',', 2, expand=True).values.T
我用df.loc[3,:]=[35432,'C','32,45,65']
在列AD中添加了一行3个值,得到:
Chr Position Name AD REF ALT1 ALT2
0 1.0 866511.0 A 13,21 13 21 None
1 1.0 881627.0 A 28,33 28 33 None
2 2.0 1599812.0 B 67,25 67 25 None
3 3.0 5432.0 C 32,45,65 32 45 65
添加一个额外的,'
或者在不改变df的情况下
df.assign(**dict(zip('REF ALT1 ALT2'.split(), zip(*df.AD.add(',').str.split(',').str[:3]))))
Chr Position Name AD REF ALT1 ALT2
0 1 866511 A 13,21 13 21
1 1 881627 A 28,33,31 28 33 31
2 2 1599812 B 67,25 67 25
您可以执行重命名
和concat
:
df = pd.concat((df, df['AD'].str.split(',', expand=True)
.rename(columns={0:'REF',1:'ALT1',2:'ALT2'})
), axis=1)
输出:
Chr Position Name AD REF ALT1
0 1 866511 A 13,21 13 21
1 1 881627 A 28,33 28 33
2 2 1599812 B 67,25 67 25
如果你知道你只有3个或2个,你可以用一个If语句(或一个try-catch)来检查这两个选项spirSquare非常感谢你,你这么快就把它修好了,对我来说效果很好。我只添加了print(df.replace(r'^\s*$,np.nan,regex=True))
来用nan.Quang-Hoang填充空格,我仍然需要ALT2列。皮尔斯夸德做得很好。谢谢大家!!
Chr Position Name AD REF ALT1
0 1 866511 A 13,21 13 21
1 1 881627 A 28,33 28 33
2 2 1599812 B 67,25 67 25