如何解决属性错误'float'对象在python中没有属性'split'?

Posted

技术标签:

【中文标题】如何解决属性错误\'float\'对象在python中没有属性\'split\'?【英文标题】:How to solve the Attribute error 'float' object has no attribute 'split' in python?如何解决属性错误'float'对象在python中没有属性'split'? 【发布时间】:2019-03-15 04:03:18 【问题描述】:

当我运行下面的代码时,它给了我一个错误,说存在属性错误:'float' object has no attribute 'split' in python。

我想知道为什么会出现这个错误。

def text_processing(df):

    """""=== Lower case ==="""
    '''First step is to transform comments into lower case'''
    df['content'] = df['content'].apply(lambda x: " ".join(x.lower() for x in x.split() if x not in stop_words))

    return df

df = text_processing(df)

错误的完整回溯:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\pydevd.py", line 1664, in <module>
    main()
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\pydevd.py", line 1658, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\pydevd.py", line 1068, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/L31307/Documents/FYP P3_Lynn_161015H/FYP 10.10.18 (Wed) still working on it/FYP/dataanalysis/category_analysis.py", line 53, in <module>
    df = text_processing(df)
  File "C:/Users/L31307/Documents/FYP P3_Lynn_161015H/FYP 10.10.18 (Wed) still working on it/FYP/dataanalysis/category_analysis.py", line 30, in text_processing
    df['content'] = df['content'].apply(lambda x: " ".join(x.lower() for x in x.split() if x not in stop_words))
  File "C:\Users\L31307\AppData\Roaming\Python\Python37\site-packages\pandas\core\series.py", line 3194, in apply
    mapped = lib.map_infer(values, f, convert=convert_dtype)
  File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer
  File "C:/Users/L31307/Documents/FYP P3_Lynn_161015H/FYP 10.10.18 (Wed) still working on it/FYP/dataanalysis/category_analysis.py", line 30, in <lambda>
    df['content'] = df['content'].apply(lambda x: " ".join(x.lower() for x in x.split() if x not in stop_words))
AttributeError: 'float' object has no attribute 'split'

【问题讨论】:

您是否了解为什么会首先出现错误?无论您拥有什么数据框,它的值都是 float 类型。但是您正在对它们调用字符串函数split。你期望它如何工作?转换您的列或进行检查,以便拆分跳过具有浮点类型的列。 错误信息暗示df['content']列包含floats,不能是split 我遇到了同类型的错误,去掉空值或者nan值后,使用df.dropna(inplace=True),上面的错误,就不再存在了。 【参考方案1】:

错误指向这一行:

df['content'] = df['content'].apply(lambda x: " ".join(x.lower() for x in x.split() \
                                    if x not in stop_words))

split 在这里被用作 Python 的内置 str 类的方法。您的错误表明df['content'] 中的一个或多个值属于float 类型。这可能是因为存在空值,即NaN,或者是非空浮点值。

一种将浮点数字符串化的解决方法是在使用split 之前仅在x 上应用str

df['content'] = df['content'].apply(lambda x: " ".join(x.lower() for x in str(x).split() \
                                    if x not in stop_words))

或者,可能是更好的解决方案,明确并使用带有try / except 子句的命名函数:

def converter(x):
    try:
        return ' '.join([x.lower() for x in str(x).split() if x not in stop_words])
    except AttributeError:
        return None  # or some other value

df['content'] = df['content'].apply(converter)

由于pd.Series.apply 只是一个有开销的循环,您可能会发现列表理解或map 更有效:

df['content'] = [converter(x) for x in df['content']]
df['content'] = list(map(converter, df['content']))

【讨论】:

这解决了问题。谢谢。 words.split(" ") 改为 str(words).split(" ")【参考方案2】:

split() 是一种仅适用于字符串的 python 方法。您的“内容”列似乎不仅包含字符串,还包含其他值,例如您无法应用 .split() 方法的浮点数。

尝试使用 str(x).split() 将值转换为字符串,或者先将整个列转换为字符串,这样效率更高。你可以这样做:

df['column_name'].astype(str)

【讨论】:

以上是关于如何解决属性错误'float'对象在python中没有属性'split'?的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 python 中的 float division by zero 错误?

如何解决 AttributeError:'list' 对象在 python 中没有属性'keys' [关闭]

PYTHON,Midpoint方法,TypeError:'float'对象不能解释为整数

如何解决消息:试图在 Codeigniter 中获取非对象错误的属性?

AttributeError: 'float' 对象没有属性 'lower'

numpy.cov() 异常:“float”对象没有属性“shape”