如何解决python中属性错误"float"对象没有属性"split"的问题? [英] How to solve the Attribute error 'float' object has no attribute 'split' in python?
问题描述
当我运行以下代码时,它给我一个错误,提示存在属性错误:"float"对象在python中没有属性"split".
When I run the below code, it gives me an error saying that there is attribute error: 'float' object has no attribute 'split' in python.
我想知道为什么会出现此错误.
I would like to know why this error comes about.
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'
推荐答案
错误指向此行:
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
is being used here as a method of Python's built-in str
class. Your error indicates one or more values in df['content']
is of type float
. This could be because there is a null value, i.e. NaN
, or a non-null float value.
一种可以对浮点数进行字符串化的解决方法是,在使用split
之前,先在x
上应用str
:
One workaround, which will stringify floats, is to just apply str
on x
before using split
:
df['content'] = df['content'].apply(lambda x: " ".join(x.lower() for x in str(x).split() \
if x not in stop_words))
或者可能是一个更好的解决方案,是显式的,并使用带有try
/except
子句的命名函数:
Alternatively, and possibly a better solution, be explicit and use a named function with a try
/ except
clause:
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
更有效率:
Since pd.Series.apply
is just a loop with overhead, you may find a list comprehension or map
more efficient:
df['content'] = [converter(x) for x in df['content']]
df['content'] = list(map(converter, df['content']))
这篇关于如何解决python中属性错误"float"对象没有属性"split"的问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!