Я работаю над сценарием 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() и лямбда-выражениях, но не знаю, как их использовать в моем случае.
Большое спасибо!
я - итерируемый в цикле, он представляет строку, а Layout - это имя столбца, но это работает отлично, потому что работает с другими столбцами.... Я обновляю вопрос, используя образец данных
вместо использования .loc() используйте .at(), это работает
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()
@JavierArambarriCalvo — я думаю, что лучше всего избегать циклов в pandas, поэтому предлагаю использовать str.split
.
ml_dataset.loc[i, "Layout"]
на самом деле не имеет особого смысла... вы имели в видуml_dataset.loc[i]["Layout"]
? Мы не сможем решить эту проблему, не видя образца данных.