ValueError: неверный литерал для int() с основанием 10: ' ' в Python

Когда я пишу свои коды таким образом, я получаю 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 ограничены. Я не знаю, как это решить. Вы можете помочь мне ? Мой набор данных здесь

Вы можете вставить сюда весь трекбэк?

SiP 13.04.2023 17:15

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)

nesly 13.04.2023 17:37

почему ты повторяешься df['second'] = df['second'].astype(int)?

SiP 13.04.2023 17:43

Из трассировки, которую вы дали, неясно, где на самом деле ошибка. Вы уверены, что это полная трассировка?

SiP 13.04.2023 17:44

На самом деле я точно следую шагам здесь:analyticsvidhya.com/blog/2021/11/… Я недостаточно знаю, чтобы сделать все это самостоятельно.

nesly 13.04.2023 17:50

Пожалуйста, добавьте трассировку и т. д. отредактируйте в свой вопрос (и отформатируйте его как код). Комментарии нечитаемы для кода и трассировок.

9769953 13.04.2023 17:55
Почему в 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
7
289
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы получаете эту ошибку 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»

nesly 13.04.2023 17:56

Замените каждую строку, которая у вас есть, с str.replace(r'D','') на str.replace(r'\D+', '')

Henrique Andrade 13.04.2023 17:59

Я знаю, что доставил вам много хлопот, но, несмотря на то, что я сделал все, что вы сказали, я все равно получаю ту же ошибку. Заранее большое спасибо за вашу помощь.

nesly 13.04.2023 18:12

Таким образом, вы не предоставили весь свой код в своем вопросе. Код в вашем вопросе работает с этим исправлением.

Henrique Andrade 13.04.2023 18:16

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