2 回答
TA贡献1802条经验 获得超5个赞
编辑以适应 OP 编辑
我就是这样做的。首先,我将填充原始列的列表,使它们的长度都相同,并且更容易使用它们。之后就是创建列并用与列表中的位置对应的值填充它。假设我们的列表最大为 4 以作为一个更简单的示例:
df = pd.DataFrame(sample, columns = headers)
df = df.rename(columns={'col1':'col_of_lists'})
max_length = max(df['col_of_lists'].apply(lambda x:len(x)))
df['col_of_lists'] = df['col_of_lists'].apply(lambda x:x + ([np.nan] * (max_length - len(x))))
for i in range(max_length):
df['col_'+str(i)] = df['col_of_lists'].apply(lambda x: x[i])
TA贡献1893条经验 获得超10个赞
将一系列列表转换为单独列的最简单方法是apply将它们转换为系列,这会触发'expand'结果类型:
result = df['col1'].apply(pd.Series)
此时,我们可以将自动编号的列调整为包含原始名称'col1',例如:
result.columns = [
'col1_{}'.format(i + 1)
for i in result.columns]
最后,我们可以将它加入到原来的 DataFrame 中。使用这是第一列这一事实很容易,只需将其连接到原始框架的左侧,'col1'在此过程中删除原始:
result = result.join(df.drop('col1', axis=1))
rename()您甚至可以通过使用更改列名的方法将其全部作为单行来完成:
df['col1'].apply(pd.Series).rename(
lambda i: 'col1_{}'.format(i + 1),
axis=1,
).join(df.drop('col1', axis=1))
添加回答
举报
