Python Pandas TypeError:类型为';浮动';没有len()

Python Pandas TypeError:类型为';浮动';没有len(),python,pandas,Python,Pandas,我正在使用Python/Pandas进行一些数据发现 MVCE:我有一个带有一些街道地址的CSV文件,我想找到文件中最长地址的长度。(这是我实际问题的简化版本) 我编写了以下简单的Python代码: import sys import pandas as pd df = pd.read_csv(sys.argv[1]) print(df['address'].map(len).max()) address列的类型是str,或者我认为是这样(见下文) 那么为什么我会得到这个错误呢 Trace

我正在使用Python/Pandas进行一些数据发现

MVCE:我有一个带有一些街道地址的CSV文件,我想找到文件中最长地址的长度。(这是我实际问题的简化版本)

我编写了以下简单的Python代码:

import sys
import pandas as pd

df = pd.read_csv(sys.argv[1])

print(df['address'].map(len).max())
address列的类型是str,或者我认为是这样(见下文)

那么为什么我会得到这个错误呢

Traceback (most recent call last):
  File "eval-lengths.py", line 8, in <module>
    print(df['address'].map(len).max())
  File "C:\Python35\lib\site-packages\pandas\core\series.py", line 2996, in map
    arg, na_action=na_action)
  File "C:\Python35\lib\site-packages\pandas\core\base.py", line 1004, in _map_values
    new_values = map_f(values, mapper)
  File "pandas/_libs/src\inference.pyx", line 1472, in pandas._libs.lib.map_infer
TypeError: object of type 'float' has no len()
更新

这是一个示例CSV文件

address,zip
555 APPLE STREET,82101
1180 BANANA LAKE ROAD,81913
577 LEMON DR,81911
,99999

最后一行是重现问题的关键。

您的列中缺少数据,由NaN(浮点型)表示

不要使用
映射
/
应用
等方法来查找长度,只需使用
str.len

df['address'].str.len()

len()
不适用的项目在结果中自动显示为NaN。您可以
fillna(-1)
将这些内容删除,以表明结果无效。

您可以在缩短的csv文件上复制错误并提供csv文件吗?没有它很难调试。另外,可以提供
df.dtypes
df['address'][:5]
的输出,这样我们就可以看到了。您是对的,空字符串(“”)显然被转换为浮点。对于从其他编程语言学习Python的人来说,这完全是违反直觉的。在大多数其他语言中,空字符串仍然是字符串。将
map(len)
更改为
str.len()
可以解决此问题。
df['address'].str.len()