请问我该如何解决这个错误(“float”类型的对象没有len())?

How can I solve this error (object of type 'float' has no len()), please?

提问人:SH_IQ 提问时间:11/1/2023 更新时间:11/1/2023 访问量:81

问:

我正在处理数据集 AMAZON ALEXA REVIEW RATINGS

当我上传我的数据集时,如下所示

df_alexa = pd.read_csv('amazon_alexa.tsv', sep='\t')

enter image description here

我想添加一个新功能,称为长度,如下所示

df_alexa['length'] = df_alexa['verified_reviews'].apply(len)

但是,我得到以下错误:

TypeError: object of type 'float' has no len()

请问有什么帮助吗?

python pandas jupyter-notebook

评论

0赞 Abdul Niyas P M 11/1/2023
似乎有些行包含值nan
4赞 Abdul Niyas P M 11/1/2023
尝试类似的东西df_alexa['verified_reviews'].fillna("").apply(len)
1赞 9769953 11/1/2023
也试试 .df_alexa['length'] = df_alexa['verified_reviews'].str.len()
0赞 9769953 11/1/2023
你能打印吗?df_alexa['verified_reviews'].dtype
0赞 SH_IQ 11/1/2023
@9769953 dtype('O')

答:

2赞 Fridolin 11/1/2023 #1

我认为这个输出是由于有时有经过验证的评论是 nan 的列造成的,所以你必须计算评论的长度,如果它是具有 nan 值的列,它应该返回 0。所以我创建了一个函数,如果它是空行,则返回 0。首先,我想尝试一个子集,也许它会起作用,但我没有弄清楚如何显示没有评论的行。

import pandas as pd

df = pd.read_csv('amazon_alexa.tsv', sep='\t')
df.dropna(subset=['verified_reviews'], inplace=True)

df['length'] = df['verified_reviews'].apply(len)

print(df)

如果有空行并且您想查看它们,则在代码下方。

import pandas as pd

def calculate_length(review):
    if pd.notna(review):
        return len(str(review))
    else:
        return 0

df = pd.read_csv('amazon_alexa.tsv', sep='\t')
df['length'] = df['verified_reviews'].apply(calculate_length)

print(df)

让我知道它是否有效,如果没有,请发表评论