Не понимаю ValueError: должны иметь равные ключи и значения len при настройке с помощью итерации в Python

Я работаю над сценарием ML и хочу изменить значения столбца так же, но вместо строки, хранящейся в виде массива. Теперь данные хранятся так: «31-2», и я хочу сохранить их как «[31,2]». Однако я получаю ValueError: должны иметь равные ключи и значения len при настройке с помощью итерации, и я не понимаю, почему. Я использую библиотеку Pandas.

Исходные данные: введите сюда описание изображения Трансформация, которую я хочу: введите сюда описание изображения

for i in range(0,len(ml_dataset)):
      var = str(ml_dataset.loc[i, "Layout"]).split("-")
      ml_dataset.loc[i, "Layout"] = var

Ошибка возникает в последнем предложении. У меня много столбцов, и с этим предложением у меня нет проблем, но при попытке сохранить в виде массива у меня возникает проблема.

Я читал о методе .apply() и лямбда-выражениях, но не знаю, как их использовать в моем случае.

Большое спасибо!

ml_dataset.loc[i, "Layout"] на самом деле не имеет особого смысла... вы имели в виду ml_dataset.loc[i]["Layout"]? Мы не сможем решить эту проблему, не видя образца данных.
Jared Smith 16.04.2024 14:39

я - итерируемый в цикле, он представляет строку, а Layout - это имя столбца, но это работает отлично, потому что работает с другими столбцами.... Я обновляю вопрос, используя образец данных

Javier Arambarri Calvo 16.04.2024 14:49

вместо использования .loc() используйте .at(), это работает

Javier Arambarri Calvo 16.04.2024 15:18
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
72
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

IIUC использует Series.str.split для приведения значений к строкам:

ml_dataset = pd.DataFrame({'Layout':['31-2','20', 5]})

ml_dataset["Layout"] = ml_dataset["Layout"].astype(str).str.split("-")
print (ml_dataset)
    Layout
0  [31, 2]
1     [20]
2      [5]

спасибо, это сработало! более того, я догадался, что в моем коде вместо использования .loc() работает использование .at()

Javier Arambarri Calvo 16.04.2024 15:18

@JavierArambarriCalvo — я думаю, что лучше всего избегать циклов в pandas, поэтому предлагаю использовать str.split.

jezrael 16.04.2024 15:20

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