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

我有一个数据框,其中第一列包含一个随机大小的列表,每个列表中从 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... 


人到中年有点甜
浏览 166回答 2
2回答

12345678_0001

编辑以适应 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])

白猪掌柜的

将一系列列表转换为单独列的最简单方法是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))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python