我正在使用一个非常简单的数据框。它只有一个功能,但是即使说它是一个对象,当我尝试将其用作字符串时,该功能也会给我错误。
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时,它会给出相同的错误。
有人知道我在做什么错吗?
答案 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)