Не могу превратить объект в строку

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

                       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)
Другие вопросы по тегам