无法将对象变成字符串

时间:2018-12-27 10:32:11

标签: python string pandas dataframe data-transform

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

                       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 个答案:

答案 0 :(得分:2)

或使用另一种更清洁的方法,使用apply

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

答案 1 :(得分:1)

要指出您的问题,当前您有一个Series,并希望它具有一个属性endswith,其属性为string。因此,您应该执行df['Id'].str.endswith('.0')

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

答案 2 :(得分:1)

如果确定末尾总是包含.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)