Как добавить вложения предложений, полученные из существующего столбца, в новый столбец?

У меня есть фрейм данных с четырьмя nw_data=['Qn_id', 'Qn_context', 'Qns', 'Anwsers']. Вот как это выглядит

Qn_id  |     Qn_context       |   Qns        |     Anwsers
 01    | In 1962, Uk gave...  | what year....| the year 1962 was.....
 02    | Major kanuti raised..| Who raised...| Kanuti akorimo rasied.

Я хочу добавить в этот набор данных пятый столбец, состоящий из вложения предложений столбца ['Ответы'].

Я использую предложение_трансформеры для создания вложений предложений.

from sentence_transformers import SentenceTransformer
model = SentenceTransformer('all-MiniLM-L6-v2')

Я попытался использовать подход, в котором:

#Created a var for the column
sent = nw_data['Answers']

и

#Passed the variable sent into the model and created the embeddings
embeddings = model.encode(sent)

потом

#Tried passing the embeddings into a new column named Embeddings
nw_data['Embeddings'] = embeddings

Я получаю сообщение об ошибке:

KeyError: 'Embeddings'

The above exception was the direct cause of the following exception:

KeyError                                  Traceback (most recent call last)
KeyError: 'Embeddings'

During handling of the above exception, another exception occurred:

ValueError                                Traceback (most recent call last)
/usr/local/lib/python3.7/dist-packages/pandas/core/internals/blocks.py in check_ndim(values, placement, ndim)
   1978         if len(placement) != len(values):
   1979             raise ValueError(
-> 1980                 f"Wrong number of items passed {len(values)}, "
   1981                 f"placement implies {len(placement)}"
   1982             )

ValueError: Wrong number of items passed 384, placement implies 1

Как я могу создать эти вложения и добавить их в новый столбец в том же фрейме данных nw_data!!

В любом случае, возможно ли это, посоветовали попробовать использовать .применить () метод или лямбда-функции, но проблема в том, что я не уверен, как и когда их использовать.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
20
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Если я правильно понимаю, вы хотите вставить список (встраивание) в ячейку.

Попробуйте использовать at:

>>> import pandas as pd
>>> from sentence_transformers import SentenceTransformer
>>> sentences = 'Absence of sanity'
>>> embedding = model.encode(sentences)
>>> df = pd.DataFrame({'foo': [1, 2], 'Embedding': None})
>>> df.at[0, 'Embedding'] = embedding.tolist()
>>> df.dtypes
foo           int64
Embedding    object
>>> df.head()
dtype: object
   foo                                          Embedding
0    1  [0.2954030930995941, 0.29181134700775146, 2.16...
1    2                                               None

Если у вас несколько предложений, просто передайте список:

>>> import pandas as pd
>>> sentences = ['Absence of sanity', 'its a new day', 'make the best of it']
>>> embeddings = model.encode(sentences)
>>> df = pd.DataFrame({'foo': [1, 2, 3], 'Embedding': None})
>>> df['Embedding'] = embeddings.tolist()
>>> print(df.head())
   foo                                          Embedding
0    1  [0.29540303349494934, 0.29181137681007385, 2.1...
1    2  [0.0362740121781826, -0.8035800457000732, 2.44...
2    3  [-0.4539063572883606, -0.4333038330078125, 2.2...

Да, это список, но в нем много предложений, разделенных, например

andy lacron 12.05.2022 12:27

предложения = ['Отсутствие здравомыслия', 'это новый день', 'извлеките из этого максимум пользы'] Итак, как мне выполнить встраивание предложений для каждого предложения, а затем добавить вложения предложений в столбец фрейма данных по одному внедрению предложения в строку . Имея в виду, что фрейм данных уже имеет свои другие столбцы.

andy lacron 12.05.2022 12:43

@andy посмотри мой ответ, тебе просто нужно добавить .tolist()

benhid 12.05.2022 13:53

Другие вопросы по теме

Панды: как суммировать значения столбца в соответствии с критериями без группировки или добавления других
Как найти способ найти все значения столбца 1, у которых нет конкретных записей в столбце 3
Python Pandas: создайте новый столбец, сопоставив одно значение столбца с другой строкой [i] и столбцом, если отдельный столбец в строке [i] равен одному значению столбца
Python/Matplotlib отображает вертикальную линию для определенных дат на линейной диаграмме
Проверьте определенные условия, оглядываясь назад на x часов (панды)
Pandas: выполнение функции на основе значений из двух фреймов данных
Панды - группировка по нескольким столбцам и сортировка по одному из них
Как сохранить исходный фрейм данных после создания его «нумерованной» версии с помощью cat.codes?
Соответствие столбцу определенного года в pandas
Как переслать нулевые значения одного столбца из значений другого столбца?