我有以下数据集
Chr Position Name AD
1 866511 A 13,21
1 881627 A 28,33
2 1599812 B 67,25
我需要将 AD 列拆分为三列[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
值填充它。有什么建议吗?谢谢任何愿意提供帮助的人。
最佳答案
添加
额外的','
df['REF'], df['ALT1'], df['ALT2'] = zip(*df.AD.add(',').str.split(',').str[:3])
df
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
或者不改变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
关于python - 拆分为多个以逗号分隔的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56758262/