Не могу превратить объект в строку - PullRequest
0 голосов
/ 27 декабря 2018

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

                       Id
0                  4853.0
1                  4853.0
2                 23430.0
3                 40704.0
4                 23298.0
5                  6246.0
6                  7345.0

Когда я делаю ее, введите ееdevolves:

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 ]

0 голосов
/ 27 декабря 2018

Или другим более чистым способом, используя apply:

df['Id']=df['Id'].apply(lambda x: x[:-2] if x.endswith('.0') else x)
0 голосов
/ 27 декабря 2018

Если вы уверены, что он всегда будет содержать .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)
0 голосов
/ 27 декабря 2018

Чтобы указать на вашу проблему, в настоящее время у вас есть Series и ожидается, что он будет иметь атрибут endswith с атрибутом string.Следовательно, вы должны сделать df['Id'].str.endswith('.0').

Однако лучше реализовать то же самое, используя функцию apply.Обратите внимание, что при использовании лямбды вы берете один элемент за раз и, следовательно, не используете str, как написано @ U9-Forward.

...