无法将对象转换为字符串
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)
我正在使用一个非常简单的数据框。它只有一个功能,但该功能似乎显示为一个浮点数,即使它说它是一个对象,当我尝试将它用作字符串时它给我错误。
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)