Когда я пишу свои коды таким образом, я получаю ValueError: недопустимый литерал для int() с основанием 10: ' '. В основном я думаю, что это проблема с преобразованием типов, но я не знаю, как это редактировать здесь. Не могли бы вы мне помочь ? Это мои коды:
#preprocessing
df['Memory'] = df['Memory'].astype(str).replace('.0', '', regex=True)
df["Memory"] = df["Memory"].str.replace('GB', '')
df["Memory"] = df["Memory"].str.replace('TB', '000')
new = df["Memory"].str.split("+", n = 1, expand = True)
df["first"]= new[0]
df["first"]=df["first"].str.strip()
df["second"]= new[1]
df["Layer1HDD"] = df["first"].apply(lambda x: 1 if "HDD" in x else 0)
df["Layer1SSD"] = df["first"].apply(lambda x: 1 if "SSD" in x else 0)
df["Layer1Hybrid"] = df["first"].apply(lambda x: 1 if "Hybrid" in x else 0)
df["Layer1Flash_Storage"] = df["first"].apply(lambda x: 1 if "Flash Storage" in x else 0)
df['first'] = df['first'].str.replace(r'D', '')
df["second"].fillna("0", inplace = True)
df["Layer2HDD"] = df["second"].apply(lambda x: 1 if "HDD" in x else 0)
df["Layer2SSD"] = df["second"].apply(lambda x: 1 if "SSD" in x else 0)
df["Layer2Hybrid"] = df["second"].apply(lambda x: 1 if "Hybrid" in x else 0)
df["Layer2Flash_Storage"] = df["second"].apply(lambda x: 1 if "Flash Storage" in x else 0)
df['second'] = df['second'].str.replace(r'D', '')
#binary encoding
df["Layer2HDD"] = df["second"].apply(lambda x: 1 if "HDD" in x else 0)
df["Layer2SSD"] = df["second"].apply(lambda x: 1 if "SSD" in x else 0)
df["Layer2Hybrid"] = df["second"].apply(lambda x: 1 if "Hybrid" in x else 0)
df["Layer2Flash_Storage"] = df["second"].apply(lambda x: 1 if "Flash Storage" in x else 0)
#only keep integert(digits)
df['second'] = df['second'].str.replace(r'D','')#convert to numeric
df['second'] = df['second'].astype(int)
df['first'] = df['first'].astype(int)
df['second'] = df['second'].astype(int)
#finalize the columns by keeping value
df["HDD"]=(df["first"]*df["Layer1HDD"]+df["second"]*df["Layer2HDD"])
df["SSD"]=(df["first"]*df["Layer1SSD"]+df["second"]*df["Layer2SSD"])
df["Hybrid"]=(df["first"]*df["Layer1Hybrid"]+df["second"]*df["Layer2Hybrid"])
df["Flash_Storage"]=(df["first"]*df["Layer1Flash_Storage"]+df["second"]*df["Layer2Flash_Storage"])
#Drop the un required columns
df.drop(columns=['first', 'second', 'Layer1HDD', 'Layer1SSD', 'Layer1Hybrid',
'Layer1Flash_Storage', 'Layer2HDD', 'Layer2SSD', 'Layer2Hybrid',
'Layer2Flash_Storage'],inplace=True)
Я получаю ошибку в заголовке этого кода, и, к сожалению, мои знания о python ограничены. Я не знаю, как это решить. Вы можете помочь мне ? Мой набор данных здесь
ValueError Traceback (последний последний вызов) Cell In[60], строка 31 25 # хранить только целые числа (цифры) 26 df['second'] = df['second'].str.replace(r'D','' )#convert to numeric ---> 31 df['second'] = df['second'].astype(int) 32 df['first'] = df['first'].astype(int) 33 df[ 'секунда'] = df['секунда'].astype(int)
почему ты повторяешься df['second'] = df['second'].astype(int)
?
Из трассировки, которую вы дали, неясно, где на самом деле ошибка. Вы уверены, что это полная трассировка?
На самом деле я точно следую шагам здесь:analyticsvidhya.com/blog/2021/11/… Я недостаточно знаю, чтобы сделать все это самостоятельно.
Пожалуйста, добавьте трассировку и т. д. отредактируйте в свой вопрос (и отформатируйте его как код). Комментарии нечитаемы для кода и трассировок.
Для помощи в отладке вам нужно сделать минимальный воспроизводимый пример . Для получения подробной информации, если вы используете Pandas или что-то подобное, см. Как сделать хорошие воспроизводимые примеры pandas . Дополнительные советы, например, как написать хороший заголовок, см. в разделе Как задать вопрос.
Вы получаете эту ошибку ValueError: invalid literal for int() with base 10
, потому что пытаетесь преобразовать серию в int (df['second'].astype(int)
), которая имеет нечисловые значения.
В строке df['second'] = df['second'].str.replace(r'D','')
ваше регулярное выражение неверно. Чтобы удалить нечисловые символы, вы должны использовать
df['second'] = df['second'].str.replace(r'\D+', '')
Также сделайте это для сериала df['first']
df['first'] = df['first'].str.replace(r'\D+', '')
теперь он выдал эту ошибку: ValueError: недопустимый литерал для int() с основанием 10: «DD»
Замените каждую строку, которая у вас есть, с str.replace(r'D','')
на str.replace(r'\D+', '')
Я знаю, что доставил вам много хлопот, но, несмотря на то, что я сделал все, что вы сказали, я все равно получаю ту же ошибку. Заранее большое спасибо за вашу помощь.
Таким образом, вы не предоставили весь свой код в своем вопросе. Код в вашем вопросе работает с этим исправлением.
Вы можете вставить сюда весь трекбэк?