Python pandas разбивает список столбцов на несколько столбцов - PullRequest
0 голосов
/ 13 октября 2019

У меня есть Pandas Dataframe, как показано ниже, с индексом и двумя столбцами. Столбец «Image_main» состоит из списка URL.

Что я хочу сделать, это разделить каждый из элементов в списке столбца «image_main» на новые столбцы в том же кадре данных. Длина списка различна в каждой строке. Например, список в строке 1 содержит 4 URL, а в строке 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:разбить столбец списков неравной длины на несколько столбцов . Однако, похоже, что он не работает, так как я получаю тот же результат, что и раньше

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 голосов
/ 13 октября 2019

Я думаю, что вам не хватает 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

0 голосов
/ 13 октября 2019

Решение в связанной с вами теме работало нормально, когда я его пробовал.

Вы не назначаете преобразование столбцу, а присоединяете его к основному кадру данных


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_'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...