【问题标题】:Can´t turn object into string不能把对象变成字符串
【发布时间】:2018-12-27 10:32:11
【问题描述】:

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

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

有人知道我做错了什么吗?

【问题讨论】:

    标签: python string pandas dataframe data-transform


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果你确定它最后总是包含 .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)
      

      【讨论】:

        【解决方案3】:

        为了指出您的问题,目前您有一个Series,并期望它有一个属性endswith,其中一个属性是string。因此,您应该使用df['Id'].str.endswith('.0')

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

        【讨论】:

        • 告诉 OP 哪里出错是有区别的。重要的是要强调在哪里使用 str 和在哪里不使用。可能如果你已经添加了,我就不必这样做了。
        • 好吧,还在抄我的答案。
        • 哦,好吧。给你参考。 :)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多