Извлечь список из кортежей и перенести в python - PullRequest
0 голосов
/ 04 ноября 2018

У меня есть данные, приведенные ниже. Я хочу извлечь первый список из списка кортежей и транспонировать список, извлеченный в столбцы.

data = {'Document_No':[0.0,1.0], 'list_of_topics': [
([(0, 0.14572892),
  (1, 0.014889247),
  (11, 0.44593897)],
 [(4, [0]), (5, [4]), (6, [11]), (7, [11]), (8, [11, 4]), (9, [11, 4])],
 [(4, [(0, 0.9999998)]),
  (7, [(11, 0.9999998)]),
  (9, [(4, 0.05520946), (11, 0.93936676)])]),
([(0, 0.2453892),
  (11, 0.78657897)],
 [(4, [0]), (5, [4]), (6, [11]), (7, [11]), (8, [11, 4]), (9, [11, 4])],
 [(4, [(0, 0.9999998)]),
  (7, [(11, 0.9999998)]),
  (9, [(4, 0.05520946), (11, 0.93936676)])])
]}

df = pd.DataFrame(data)

желаемый результат:

  Document_No     0            1                 11
0          0.0  0.14572892  0.014889247     0.44593897
1          1.0  0.2453892   0               0.78657897

Мое решение:

pd.DataFrame([[j[0] for j in i] for i in df['list_of_topics']], index=df['Document_No']).transpose()
Out[245]: 
Document_No                    0.0                    1.0
0                  (0, 0.14572892)        (0, 0.14572892)
1                         (4, [0])               (4, [0])
2            (4, [(0, 0.9999998)])  (4, [(0, 0.9999998)])

Не получается желаемый результат. Может кто-нибудь помочь мне найти, где я делаю неправильно.

1 Ответ

0 голосов
/ 04 ноября 2018

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

df1 = pd.DataFrame.from_records(df.list_of_topics[0])
for tup in df.list_of_topics[1:]:
    df1 = df1.merge(pd.DataFrame.from_records(tup),on=0,how='outer')

df1.set_index(0,inplace=True)
df1.T.reset_index(drop=True)

Из:

            0   1   11
0   0.145729    0.014889    0.445939
1   0.245389    NaN     0.786579
...