Как разбить кортеж кортежей на столбцы - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть кадр данных pandas, где один столбец - это кортеж с вложенным кортежем. У вложенного кортежа есть два существующих идентификатора. Я хочу разбить каждый элемент в общем кортеже на новые добавленные столбцы. Вот мой DF пока:

df
  id1  id2   tuple_of_tuple
0 a    e    ('cat',100,('a','f'))
1 b    f    ('dog',100,('b','g'))
2 c    g    ('cow',100,('d','h'))
3 d    h    ('tree',100,('c','e'))

Я пытался реализовать приведенный ниже код на небольшом подмножестве данных, и это, похоже, сработало. Появились новые добавленные столбцы с каждым извлеченным / разнесенным элементом, где он должен был быть.

df[['Link_1', 'Link_2','Link_3','Link_4']] = df['tuple_of_tuple'].apply(pd.Series)

Но когда я применяю его ко всему набору данных, я получаю ошибку «ValueError: Столбцы должны быть такой же длины, что и ключ». (Я должен отметить, что вокруг валяется пара NaN, так как во всей записи в строке для столбца tuple_of_tuple будет просто NaN). Как я могу это исправить?

1 Ответ

0 голосов
/ 30 апреля 2018

Вот очень элегантный способ сделать это, используя * оператор распаковки python3.6:

df2 = pd.DataFrame(
    data=[[*i, *j] for *i, j in df.pop('tuple_of_tuple')], 
    columns=['link_1', 'link_2', 'link_3', 'link_4']
)

Затем вы можете связать df2 с df, используя pd.concat:

pd.concat([df, df2], axis=1)

  id1 id2 link_1  link_2 link_3 link_4
0   a   e    cat     100      a      f
1   b   f    dog     100      b      g
2   c   g    cow     100      d      h
3   d   h   tree     100      c      e
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...