2017-01-03 173 views
2

我有一個熊貓數據框df,它只有一列col。我想循環使用col的值,並使用第一列col的值添加列以填充值。例如,第一行是一個列表,其中有3個元素['text1','text2','text3']。我想添加3列,並使用'text1','text2''text3'填充值。pandas dataframe通過使用第一列的值創建新列和填充值

import pandas as pd 

df=pd.DataFrame({'col':[['text1','text2','text3'],['mext1','mext2'],['cext1']]}) 
df 

    col 
0 [text1, text2, text3] 
1 [mext1, mext2] 
2 [cext1] 

我想是這樣的:

col      col_1  col_2  col_3 
0 [text1, text2, text3] text1  text2  text3 
1 [mext1, mext2]   mext1  mext2  Nan 
2 [cext1]     cext1  Nan  Nan  

您的幫助將不勝感激。

回答

3

您可以通過將單列中的值轉換爲list表示形式來構造新的數據框。 list的元素現在將成爲單獨的列實體。

這些然後可以與原來的DF縱列(axis=1)

df_expand = pd.DataFrame(df['col'].tolist(), df.index) 
df_expand.columns = df_expand.columns + 1 
pd.concat([df['col'], df_expand.add_prefix('col_')], axis=1) 

enter image description here

要獲得None被表示爲NaN,你能在最後一語法的末尾添加.replace({None:np.NaN})連接起來。

+0

不用於'DF = pd.DataFrame({ 'COL' 工作」, '文本2', '文字3'],[ 'mext1', 'mext2'],[ 'cext1'],[ 'cext2']]})'。問題:'np.arange(1,df.shape [0] + 1)'。 –

+0

感謝您指出。修復。 –

3

DataFrame構造函數的另一個解決方案,其中需要rename列S和add_prefix

print (pd.DataFrame(df.col.values.tolist(), index=df.col) 
     .rename(columns = lambda x: x+1) 
     .add_prefix('col_') 
     .reset_index()) 

        col col_1 col_2 col_3 
0 [text1, text2, text3] text1 text2 text3 
1   [mext1, mext2] mext1 mext2 None 
2    [cext1] cext1 None None 

解決方案,其中通過找到str.lencolmax長度列表:[[「文本1:

cols = df.col.str.len().max() + 1 
print (cols) 
4 
print (pd.DataFrame(df.col.values.tolist(), index=df.col,columns = np.arange(1, cols)) 
     .add_prefix('col_') 
     .reset_index()) 
        col col_1 col_2 col_3 
0 [text1, text2, text3] text1 text2 text3 
1   [mext1, mext2] mext1 mext2 None 
2    [cext1] cext1 None None 
相關問題