2015-10-22 2 views
0

У меня есть панд Dataframe ФР, который содержит отрицательные строки и я хотел бы, чтобы преобразовать их плавать:Преобразование столбца панды DataFrame содержащего отрицательные строк в поплавок

NY_resitor1 NY_resitor2 SF_type  SF_resitor2 
    45   "-36"   Resis   40     
    47   "36"   curr   34      
     .   .   .    .     
    49   "39"   curr   39 
    45   "-11"   curr   12 
    12   "-200"   Resis   45 

Это код, который я написал

df["NY_resitor2 "]=df["NY_resitor2 "].astype(float) 

, но у меня есть ошибка:

ValueError: could not convert string to float: "-32" 

чем проблема?

+0

работает для меня. Какая версия Панд? Кроме того, ваше первое значение - «-36», но ошибка «-32». Любая причина расхождения? – Alexander

+0

на самом деле он делает это для последнего номера -200 – user3841581

+1

Хм, проблема в том, что у вас встроенные двойные кавычки? а не просто строка '-36', у вас есть' '-36''? Если это так, вы можете удалить все это с помощью 'df ['NY_resitor2'] = df ['NY_resitor2']. Str.replace ('"', '') ', и тогда я думаю, что вы делаете преобразование, используя' as_type' или 'convert_numeric 'как обычно – EdChum

ответ

2

Я думаю, что это может быть случай странной версии unicode "-" где-то в ваших строковых данных. Например, это должно работать:

>>> import pandas as pd 
>>> ser = pd.Series(['-36', '36']) 
>>> ser.astype(float) 
0 -36 
1 36 
dtype: float64 

Но это не так, потому что я заменил стандартный знак минус с U+2212 minus sign:

>>> ser2 = pd.Series(['−32', '36']) 
>>> ser2.astype(float) 
... 
ValueError: could not convert string to float: '−32' 

вы могли бы решить эту проблему, в частности, избавившись от задеть символы, используя str.replace():

>>> ser2.str.replace('−', '-').astype(float) 
0 -32 
1 36 
dtype: float64 

Если это не проблема, то я не знаю, что это!


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

>>> ser3 = pd.Series(['"-36"', '"36"']) 
>>> ser3.astype(float) 
... 
ValueError: could not convert string to float: '"-36"' 

В этом случае вам нужно раздеть их из первых:

>>> ser3.str.replace('"', '').astype(float) 
0 -36 
1 36 
dtype: float64 
+1

. В чем разница между ('- ',' - '), что является символом клавиатуры для другого? – user3841581

+0

Я не знаю ни одного символа клавиатуры - я скопировал и вставил символ со связанной страницы. Причина, по которой я подозреваю, что это может быть преступником, заключается в том, что Я столкнулся с подобными проблемами перед загрузкой данных из файла. Вы можете проверить его, выполнив, например, '' np.unique (['-'] + [char for char в ser2.sum()]) '' , который в этом случае возвращает список с двумя версиями знака минус. – jakevdp

+0

Существует только один тип, когда i попробуйте свое предложение. Я очень смущен тем, что кажется проблемой здесь. – user3841581

Смежные вопросы