Список списков для строк в кадре данных панд - PullRequest
0 голосов
/ 14 мая 2018

После использования моего сценария мои алгоритмы возвращают ожидаемый результат в списке списков, подобных этому: pred=[[b,c,d],[b,a,u],...[b,i,o]]

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

Однако, когда я пытаюсь поместить список в столбец, яполучить ошибку:

ValueError: Length of values does not match length of index

Глядя на данные, он помещает весь список в одну строку вместо каждой записи в новой строке.

РЕДАКТИРОВАТЬ:

Все значения в списке должны быть помещены в имя столбца и pred

sent  token   pred
 0     a        b
 0     b        c
 0     b        d
 1     a        b
 1     b        a
 1     c        u

Решение:

x = []
for _ in pred:
  if _ is not None:
    x += _

df_new = pd.DataFrame(df)
df_new["pred"] = list(itertools.chain.from_iterable(x))

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Вы можете использовать itertools.chain, что позволяет сгладить список списков, который затем можно нарезать в соответствии с длиной вашего фрейма данных.

Данные от @ ak_slick.

import pandas as pd
from itertools import chain

df = pd.DataFrame({'sent': [0, 0, 0, 1, 1, 1], 
                   'token': ['a', 'b', 'b', 'a', 'b', 'c']})

lst = [['b','c',None],['b',None,'u'], ['b','i','o']]

df['pred'] = list(filter(None, chain.from_iterable(lst)))[:len(df.index)]

print(df)

   sent token pred
0     0     a    b
1     0     b    c
2     0     b    d
3     1     a    b
4     1     b    a
5     1     c    u
0 голосов
/ 14 мая 2018
import pandas as pd

# combine input lists
x = []
for _ in [['b','c','d'],['b','a','u'], ['b','i','o']]:
    x += _

# output into a single column
a = pd.Series(x)

# mock original dataframe
b = pd.DataFrame({'sent': [0, 0, 0, 1, 1, 1], 
                  'token': ['a', 'b', 'b', 'a', 'b', 'c']})

# add column to existing dataframe
# this will avoid the mis matched length error by ignoring anything longer 
# than your original data frame
b['pred'] = a

   sent token pred
0     0     a    b
1     0     b    c
2     0     b    d
3     1     a    b
4     1     b    a
5     1     c    u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...