2017-01-03 169 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 
相关问题