熊猫:不等长的名单列拆分成多列

问题描述:

我有一个熊猫数据帧,看起来像下面:熊猫:不等长的名单列拆分成多列

    codes 
1     [71020] 
2     [77085] 
3     [36415] 
4     [99213, 99287] 
5     [99233, 99233, 99233] 

我想在df['codes']分裂成清单列,如下面:

    code_1  code_2  code_3 
1     71020 
2     77085 
3     36415 
4     99213  99287 
5     99233  99233  99233 

其中没有值(因为列表不那么长)的列填充空白或NaN或其他东西。

我见过像this one和其他类似的答案,虽然他们在等长的列表上工作,但当我尝试在不等长列表上使用方法时,它们都会抛出错误。对此有一个好的方法吗?

尝试:

pd.DataFrame(df.codes.values.tolist()).add_prefix('code_') 

    code_0 code_1 code_2 
0 71020  NaN  NaN 
1 77085  NaN  NaN 
2 36415  NaN  NaN 
3 99213 99287.0  NaN 
4 99233 99233.0 99233.0 

附上index

pd.DataFrame(df.codes.values.tolist(), df.index).add_prefix('code_') 

    code_0 code_1 code_2 
1 71020  NaN  NaN 
2 77085  NaN  NaN 
3 36415  NaN  NaN 
4 99213 99287.0  NaN 
5 99233 99233.0 99233.0 

我们可以明确所有与此格式:

f = lambda x: 'code_{}'.format(x + 1) 
pd.DataFrame(
    df.codes.values.tolist(), 
    df.index, dtype=object 
).fillna('').rename(columns=f) 

    code_1 code_2 code_3 
1 71020    
2 77085    
3 36415    
4 99213 99287  
5 99233 99233 99233 

另一种解决方案:

In [95]: df.codes.apply(pd.Series).add_prefix('code_') 
Out[95]: 
    code_0 code_1 code_2 
1 71020.0  NaN  NaN 
2 77085.0  NaN  NaN 
3 36415.0  NaN  NaN 
4 99213.0 99287.0  NaN 
5 99233.0 99233.0 99233.0