Python Pandas将列列表分为多个列

时间:2019-10-13 17:59:19

标签: python pandas dataframe

我有一个如下的Pandas Dataframe,有一个索引和两列。 “ Image_main”列由网址列表组成。

我想要做的是将“ image_main”列的列表中的每个项目分离到同一数据框中的新列中。列表的长度在每一行中都不同。例如,第1行中的list有4个网址,而第3行中只有2个网址。

index   image_main                                      referenceID
0     ['https://x.com/1.jpg','https://x.com/2.jpg',...  3.297439e+10
1     ['https://y.com/1.jpg','https://y.com/2.jpg',...  4.000220e+12
2     ['https://z.com/1.jpg','https://z.com/2.jpg',...  4.000130e+12
3     ['https://v.com/1.jpg','https://v.com/2.jpg',...  3.296914e+10
4     ['https://a.com/1.jpg','https://a.com/2.jpg',...  4.000080e+12

到目前为止,我已经根据以下问题的答案进行了尝试:Pandas: split column of lists of unequal length into multiple columns。但是,由于我得到的结果与以前相同,因此似乎不起作用

df['image_main'] = pd.DataFrame(df['image_main'].values.tolist()).add_prefix('code_')
print(df)

    image_main                                         referenceID
0   ['https://x.com/1.jpg','https://x.com/2.jpg',...   3.297439e+10
1    ['https://y.com/1.jpg','https://y.com/2.jpg',...   4.000220e+12
2    ['https://z.com/1.jpg','https://z.com/2.jpg',...   4.000130e+12
3    ['https://v.com/1.jpg','https://v.com/2.jpg',...   3.296914e+10
4    ['https://a.com/1.jpg','https://a.com/2.jpg',...   4.000080e+12

如何在同一数据框中将image_main列中的每个项目拆分为新的单独列?

所需结果类似于以下内容:

    image_main     referenceID.     image_1.                  image 2                ....
0   ...,...        3.297439e+10.    'https://x.com/1.jpg'    'https://x.com/2.jpg' 
1   ...,...        3.297439e+10.    'https://y.com/1.jpg'    'https://y.com/2.jpg' 
2   ...,...        3.297439e+10.    'https://z.com/1.jpg'    'https://z.com/2.jpg' 
3   ...,...        3.297439e+10.    'https://v.com/1.jpg'    'https://v.com/2.jpg' 
4   ...,...        3.297439e+10.    'https://a.com/1.jpg'    'https://a.com/2.jpg' 


2 个答案:

答案 0 :(得分:0)

您尝试链接的线程中的解决方案工作正常。

您没有将转换分配给列,而是将其与主数据框连接起来


df.join(pd.DataFrame(df["image_main"].values.tolist()).add_prefix('image_'))

编辑:

要将image_main字符串值转换为列表,请使用以下命令:

df["image_main"] = df["image_main"].str.replace("\[|\]|\'", "").str.split(",")
df.join(pd.DataFrame(df["image_main"].values.tolist()).add_prefix('image_'))

答案 1 :(得分:0)

我认为您缺少的是pd.merge:

df:

     A
0   [1, 2, 3, 4]
1   [1, 2, 3, 4]
2   [1, 2, 3, 4]

合并到新的df中:

pd.merge(df, pd.DataFrame(df['A'].values.tolist()).add_prefix('code_'), on=df.index)

输出:

    key_0   A             code_0    code_1  code_2  code_3
0   0       [1, 2, 3, 4]    1         2       3      4
1   1       [1, 2, 3, 4]    1         2       3      4
2   2       [1, 2, 3, 4]    1         2       3      4