#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’. Я все еще хочу их