Ошибка значения: не удалось преобразовать строку в значение с плавающей точкой: ‘»152.7″‘

#python-3.x #pandas

#python-3.x #панды

Вопрос:

У меня есть фрейм данных, который я создал из словаря примерно так: pd.DataFrame.from_dict(dict1, dtype=str)

однако типы данных для всех полей отображаются как «Объект».

Я хочу преобразовать некоторые столбцы в int и/или float, но я не могу этого сделать, даже попробовав несколько способов.

Я пробовал следующие способы :

 df['duration'].astype(int)  df['duration'].astype(str).astype(int)  df['duration'].replace('"','').astype(int)   ValueError: invalid literal for int() with base 10: '"467900"'  df['cpu'].astype(float) df['cpu'].astype(str).astype(float) df['cpu'].replace('"','').astype(float)  ValueError: could not convert string to float: '"152.7"'  

Это мой фрейм данных :

 duration realtime cpu 0 "268641" "46871" "152.7" 1 "208642" "2709" "107.1" 2 "208817" "2163" "108.2" 3 "238558" "9307" "141.1" 4 "208881" "2729" "106.7"   

Пожалуйста, дайте мне знать, как я могу заставить это работать.

Заранее спасибо! Пожалуйста, дайте мне знать, как я могу заставить это работать.

Заранее спасибо!

Ответ №1:

 df=df.replace(regex='[^d.]', value='')#Remove any non digits except the decimal point  #Then now convert as you want df['realtime']=df['realtime'].astype(int) df['cpu']=df['cpu'].astype(float)  

Ответ №2:

В дополнение к ответу @wwnde вы также можете выполнить эту операцию в одной строке следующим образом:

 df.replace(regex='[^d.]', value='').astype({  'duration' : int,  'realtime' : int,  'cpu' : float })  

Выход:

 duration realtime cpu 0 268641 46871 152.7 1 208642 2709 107.1 2 208817 2163 108.2 3 238558 9307 141.1 4 208881 2729 106.7  

Ответ №3:

проблема, которую я вижу здесь, заключается в том, что у вас есть » в строке. Правильное представление вашей строки — «268641». Грязное решение было бы:

 df[duration] = list(map(lambda x: x.replace('"',''),df[duration]))  df[realtime] = list(map(lambda x: x.replace('"',''),df[realtime]))  df[cpu] = list(map(lambda x: x.replace('"',''),df[cpu]))  

тогда вы можете попробовать

df[cpu].astype(int)

Комментарии:

1. Это можно сделать простым способом, как упоминалось @wwnde

Ответ №4:

Еще один способ заставить ваш код работать (потому что вы были почти правы).

Если вы хотите использовать строковую функцию в столбце, вам нужно добавить .str перед ней.

Подобный этому

 df['duration'].str.replace('"','').astype(float)