为了账号安全,请及时绑定邮箱和手机立即绑定

从数据框中包含的列表中将列动态添加到 pandas 数据框

从数据框中包含的列表中将列动态添加到 pandas 数据框

人到中年有点甜 2022-07-26 16:35:28
我有一个数据框,其中第一列包含一个随机大小的列表,每个列表中从 0 到大约 10 个项目。此数据框还包含其他几列数据。我想插入与最长列表的长度一样多的列,然后按顺序填充值,以便每一列在第一列的列表中都有一个项目。我不确定解决这个问题的好方法。sample = [[[0,2,3,7,8,9],2,3,4,5],[[1,2],2,3,4,5],[[1,3,4,5,6,7,8,9,0],2,3,4,5]]headers = ["col1","col2","col3","col4","col5"]df = pd.DataFrame(sample, columns = headers)在此示例中,我想在第 1 列之后添加 9 列,因为这是数据帧第三行中列表的最大长度。这些列将填充: 0 2  3    7    8     9  NULL NULL NULL in the first row, 1 2 NULL NULL NULL NULL NULL NULL NULL in the second, etc... 
查看完整描述

2 回答

?
12345678_0001

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])


查看完整回答
反对 回复 2022-07-26
?
白猪掌柜的

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))


查看完整回答
反对 回复 2022-07-26
  • 2 回答
  • 0 关注
  • 165 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号