我有一个如下的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'
答案 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