2017-06-20 149 views
3

我有一個熊貓數據幀,看起來像下面:熊貓:不等長的名單列拆分成多列

    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和其他類似的答案,雖然他們在等長的列表上工作,但當我嘗試在不等長列表上使用方法時,它們都會拋出錯誤。對此有一個好的方法嗎?

回答

7

嘗試:

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 
3

另一種解決方案:

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