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 时,它给出了同样的错误。

有谁知道我做错了什么?

4

3 回答 3

2

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

df['Id']=df['Id'].apply(lambda x: x[:-2] if x.endswith('.0') else x)
于 2018-12-27T10:35:05.880 回答
1

要指出您的问题,目前您拥有 aSeries并期望它endswith具有 is 的属性string。因此,你应该这样做df['Id'].str.endswith('.0')

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

于 2018-12-27T10:33:34.500 回答
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)
于 2018-12-27T10:48:51.900 回答