преобразование df в список списка

#python #pandas

#python #панды

Вопрос:

Как получить следующий вывод списка списков из фрейма данных:

Входной фрейм данных:

      0          1
0   if         IN
1   trade      NN   
2   figures    NNS
3   for        IN
4   September  NNP
5   ,          ,
6   due        JJ   
7   for        IN
8   release    NN
9   tomorrow   NN
10  ,          ,
  

Выходной список:

 [[('if', 'IN'),
 ('trade', 'NN'),
 ('figures', 'NNS'),
 ('for', 'IN'),
 ('September', 'NNP'),
 (',', ',')],
 [('due', 'JJ'),
 ('for', 'IN'),
 ('release', 'NN'),
 ('tommorow', 'NN'),
 (',', ',')]]
  

Список разбивается всякий раз, когда есть разделитель ,

Комментарии:

1. Внутренний список содержит пару 1-го и 2-го столбцов

Ответ №1:

Измененный ответ: на основе комментария о разделении, когда есть разделитель ',', ',' :

 outputList = list([[]])
ind = 0
for value in df.values:
    value = tuple(value)
    outputList[ind].append(value)
    if (value == (',', ',')):
        outputList.append(list([]))
        ind  = 1

#remove last empty inner list which is empty    
outputList.pop()
  

Вывод:

 [[('if', 'IN'), ('trade', 'NN'), ('figures', 'NNS'), ('for', 'IN'), ('September', 'NNP'), (',', ',')], [('due', 'JJ'), ('for', 'IN'), ('release', 'NN'), ('tomorrow', 'NN'), (',', ',')]]
  

Первый ответ:

Чтобы преобразовать фрейм данных в массив кортежей, вы можете:

 outputList = [[tuple(value) for value in df.values]]
outputList
  

Вывод:

 [[('if', 'IN'), ('trade', 'NN'), ('figures', 'NNS'), ('for', 'IN'), ('September', 'NNP'), (',', ','), ('due', 'JJ'), ('for', 'IN'), ('release', 'NN'), ('tomorrow', 'NN'), (',', ',')]]
  

Комментарии:

1. Внешний список содержит несколько внутренних списков, которые разделяются всякий раз, когда есть какой-либо разделитель, как показано в строке 6

Ответ №2:

Использовать:

 g = df.isin([',', '.']).any(axis=1).shift(fill_value=0).cumsum()

L = df.groupby(g).apply(lambda x: [tuple(x) for x in x.to_numpy()]).tolist()
print (L)
[[('if', 'IN'), ('trade', 'NN'), ('figures', 'NNS'), ('for', 'IN'), ('September', 'NNP'), (',', ',')], 
 [('due', 'JJ'), ('for', 'IN'), ('release', 'NN'), ('tomorrow', 'NN'), (',', ',')]]
  

Комментарии:

1. Внешний список содержит несколько внутренних списков, которые разделяются всякий раз, когда есть какой-либо разделитель, например, или .