Не могу превратить объект в строку
Я работаю с очень простым фреймом данных. У него есть только одна особенность, но эта особенность выглядит как поплавок, даже если она говорит, что это объект, и выдает ошибку, когда я пытаюсь использовать ее как строку.
Id
0 4853.0
1 4853.0
2 23430.0
3 40704.0
4 23298.0
5 6246.0
6 7345.0
Когда я делаю dtypes, это передается:
actor_identity_id float64 dtype: object
Так я и сделал:
df ['Id'] = df ['Id']. astype (str)
Но это ничего не делает, потому что позже я пытаюсь использовать это как строку:
if df['Id'].endswith('.0'):
url = df['Id'][:-2]
Чтобы избавиться от конца строки и она переходит в ошибку:
AttributeError: 'Series' object has no attribute 'endswith'
Это дает ту же ошибку, когда я использую rsplit.
Кто-нибудь знает, что я делаю не так?
3 ответа
Или другой более чистый способ, используя apply
:
df['Id']=df['Id'].apply(lambda x: x[:-2] if x.endswith('.0') else x)
Чтобы указать на вашу проблему, в настоящее время у вас есть Series
и ожидая, что это будет иметь атрибут endswith
с является атрибутом string
, Следовательно, вы должны сделать df['Id'].str.endswith('.0')
,
Однако лучше реализовать то же самое, используя apply
функция. Обратите внимание, что при использовании лямбды вы берете один элемент за раз и, следовательно, не использовать str
как написано @U9-Forward.
Если вы уверены, что он всегда будет содержать.0 в конце, то вместо этого вы можете использовать простой способ
df['id']=df['id'].apply(lambda x: int(x))
Так как это столбец id, и я думаю, это не может быть значением с плавающей запятой. Редактировать:
Если вы не уверены, то
df['id']=df['id'].apply(lambda x: int(x) if x-int(x)==0)