无法将对象转换为字符串

Can´t turn object into string

我正在使用一个非常简单的数据框。它只有一个功能,但该功能似乎显示为一个浮点数,即使它说它是一个对象,当我尝试将它用作字符串时它给我错误。

                       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 时出现同样的错误。

有谁知道我做错了什么?

指出你的问题,目前你有一个 Series 并期望它有一个属性 endswith 和一个 string 的属性。因此,你应该做 df['Id'].str.endswith('.0').

但是,最好使用 apply 函数实现相同的功能。请注意,当使用 lambda 时,您一次取一个元素,因此不使用 @U9-Forward 编写的 str

或者另一种更简洁的方法,使用 apply:

df['Id']=df['Id'].apply(lambda x: x[:-2] if x.endswith('.0') else x)

如果您确定它的末尾始终包含 .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)