【问题标题】:Exception has occurred: TypeError object of type 'float' has no len()发生异常:“float”类型的 TypeError 对象没有 len()
【发布时间】:2021-04-15 20:09:50
【问题描述】:

我正在尝试执行此代码

import pandas as pd

df_schema = pd.read_csv('survey_results_schema.csv')
df_results = pd.read_csv('survey_results_public.csv', index_col='Respondent')

print(df_results['Country'].apply(len))

我应该得到这个:

Respondent
1                14
2                22
3                8
       ...

但我不断收到此错误,我不知道如何解决它:

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

如果我们执行这行print(df_results['Country']),我们会得到这个

Respondent
1                United Kingdom
2        Bosnia and Herzegovina
3                      Thailand
4                 United States
5                       Ukraine
              ...
88377                    Canada
88601                       NaN
88802                       NaN
88816                       NaN
88863                     Spain

我的代码有什么问题?

【问题讨论】:

  • 它是如何工作的,在里面使用 lambda 试试你自己!
  • 您期望df_results 中的所有行都被填充,我们可以从最终的代码块中看到某些行上存在缺失值(NaN)。你需要弄清楚如何处理它们。一个好的起点在这里:working with missing data
  • @BhavyaParikh 使用 lambda 无法解决此处的问题,您可以在不使用 lambda 的情况下应用 len。问题是NaN 是浮点数,没有长度。
  • 用你自己的话来说,你认为len(NaN)的结果应该是什么?为什么?你认为NaN 到底是什么?

标签: python pandas


【解决方案1】:

您的问题可能是您的数据中有 NaN。 NaN 类型被识别为浮点数,因此这是您出错的原因。

以下代码将为每个 NaN 值设置 0,否则将设置值的 len:

print(df_results['Country'].apply(lambda x: 0 if pd.isna(x) else len(x)))

更好的方法是在使用数据框之前清除空值。 您可以为此使用 dropna 函数: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.dropna.html#pandas.DataFrame.dropna

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-15
    • 2021-01-23
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多