Как исправить в Pandas: не удалось преобразовать строку в число с плавающей запятой


Одна распространенная ошибка, с которой вы можете столкнуться при использовании pandas:

ValueError : could not convert string to float: '$400.42'

Эта ошибка обычно возникает, когда вы пытаетесь преобразовать строку в число с плавающей запятой в pandas, но строка содержит одно или несколько из следующих:

  • Пространства
  • Запятые
  • Специальные символы

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

В следующем примере показано, как устранить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'store': ['A', 'B', 'C', 'D'],
 'revenue': ['$400.42', '$100.18', '$243.75', '$194.22']})

#view DataFrame
print(df)

# store revenue
#0 A $400.42
#1 B $100.18
#2 C $243.75
#3 D $194.22

#view data type of each column
print(df.dtypes )

#store object
#revenue object
#dtype: object**

Теперь предположим, что мы пытаемся преобразовать столбец revenue из строки в число с плавающей запятой:

#attempt to convert 'revenue' from string to float
df['revenue'] = df['revenue'].astype (float)

ValueError : could not convert string to float: '$400.42'

Мы получаем ошибку, так как столбец revenue содержит в строках знак доллара.

Как исправить ошибку

Способ устранения этой ошибки заключается в использовании функции replace() для замены знаков доллара в столбце revenue ничем перед выполнением преобразования:

#convert revenue column to float
df['revenue'] = df['revenue'].apply(lambda x: float(x.split()[0].replace('$','')))

#view updated DataFrame
print(df)

# store revenue
#0 A 400.42
#1 B 100.18
#2 C 243.75
#3 D 194.22

#view data type of each column
print(df.dtypes )

#store object
#revenue float64
#dtype: object

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

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить в Python: объект 'numpy.ndarray' не вызывается
Как исправить: TypeError: объект 'numpy.float64' не вызывается
Как исправить: ошибка типа: ожидаемая строка или байтовый объект