Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在多个列中拆分以逗号分隔的值_Python_Pandas_Split - Fatal编程技术网

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