我有一个pandas数据框df
,它只有一列col
。我想循环col
的值,并使用第一列col
的值添加列以填充值。例如,第一行是一个列表,其中包含3个元素['text1','text2','text3']
。我想添加3列,并使用'text1'
,'text2'
和'text3'
填充值。
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
我们将不胜感激。
答案 0 :(得分: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)
要将None
表示为NaN
,您可以在最后一种语法的末尾添加.replace({None:np.NaN})
。
答案 1 :(得分:3)
使用DataFrame
构造函数的另一个解决方案,其中需要rename
列和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
通过max
在col
列中查找str.len
列表长度的解决方案:
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