2016-08-24 3 views
2

У меня есть dataframe создана форма выходного сигнала в формате JSON, который выглядит следующим образом:Невозможно преобразовать строку плавать в панд (ValueError)

 Total Revenue Average Revenue Purchase count Rate 
Date  
Monday 1,304.40 CA$  20.07 CA$   2,345    1.54 % 

Значение, сохраненное принимаютс в виде строки из JSON. Я пытаюсь:

1) Удалить все символы в записи (например: CA $ или%) 2) преобразование скорости и доходы столбцов плавать 3) преобразует количество столбцов в качестве ИНТА

Я пытался выполните следующие действия:

df[column] = (df[column].str.split()).apply(lambda x: float(x[0])) 

Это работает отлично, за исключением, когда у меня есть значение кома (например: 1465 не будет работать в то время как 143 будет).

Я попытался использовать несколько функций для замены «,» на «» и т. Д. До сих пор ничего не работало. Я всегда получаю следующее сообщение об ошибке:

ValueError: could not convert string to float: '1,304.40'

ответ

0

Эти строки имеют запятые как разделители тысяч, так что вы должны будете удалить их перед вызовом float:

df[column] = (df[column].str.split()).apply(lambda x: float(x[0].replace(',', ''))) 

Это может быть немного упрощен путем перемещения split внутри lambda:

df[column] = df[column].apply(lambda x: float(x.split()[0].replace(',', ''))) 
0

Другое решение с list пониманием, если необходимо применить stringfunctions работает только с Series (колонкам) DataFrame как str.split и str.replace:

df = pd.concat([df[col].str.split() 
         .str[0] 
         .str.replace(',','').astype(float) for col in df], axis=1) 

#if need convert column Purchase count to int 
df['Purchase count'] = df['Purchase count'].astype(int) 
print (df) 
     Total Revenue Average Revenue Purchase count Rate 
Date               
Monday   1304.4   20.07   2345 1.54 
+0

Как это работает? – jezrael

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