Как преобразовать всю строку столбца в число с плавающей точкой внутри фрейма данных с помощью pandas?

#python #pandas #csv

#питон #панды #csv

Вопрос:

У меня есть столбец в моем df, который называется size

 df['Size']

0         19M
1         14
2        8.7
3         25
4        2.8M
5        5.6
 

Я хотел удалить все M в этом столбце, что я и сделал

 df.Size.str.replace('M','')
 

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

Я попробовал df.Size.float.replace(‘M’,»)

Но я получаю эту ошибку:

Ошибка атрибута: объект ‘Series’ не имеет атрибута ‘float’

Что мне делать?

Ответ №1:

Я использую to_numeric

Обновить

 pd.to_numeric(df.Size.replace('M','',regex=True),errors='coerce').fillna(df.Size)
Out[497]: 
0     19
1    14k
2    8.7
3     25
4    2.8
5    5.6
Name: Size, dtype: object
 

Проверьте преобразование здесь, только ячейка содержит k по-прежнему str типа, все остальные становятся float

 pd.to_numeric(df.Size.replace('M','',regex=True),errors='coerce').fillna(df.Size).apply(type)
Out[501]: 
0    <class 'float'>
1      <class 'str'>
2    <class 'float'>
3    <class 'float'>
4    <class 'float'>
5    <class 'float'>
Name: Size, dtype: object
 

Ввод данных

 df
Out[500]: 
   Size
0   19M
1   14k
2   8.7
3    25
4  2.8M
5   5.6
 

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

1. нет другого способа использовать «float»?

2. @lilzuzu df.Size.replace('M','',regex=True).astype(float)

3. выдает ошибку: ValueError: не удалось преобразовать строку в число с плавающей запятой: ‘201k’. некоторые значения исчисляются тысячами, и я хочу сохранить », но я не хочу «M’

Ответ №2:

На всякий случай мы можем использовать regex для удаления всех букв:

 df['Size'] = df['Size'].str.replace('([A-Za-z])', '', regex=True).astype(float)

print(df)
    Size
0   19.0
1   14.0
2    8.7
3   25.0
4    2.8
5    5.6
6  201.0
 

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

1. Я хочу удалить только ‘M’, потому что некоторые значения находятся в ‘k’. Я все еще хочу их