熊猫为什么在处理python中的String对象时[TypeError:类型为'float'的对象没有len()]?

时间:2018-07-21 23:32:39

标签: 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,或者我想(见下文)。

为什么会出现此错误?

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()

这是df.info()

的输出
RangeIndex: 154733 entries, 0 to 154732
Data columns (total 2 columns):
address    154510 non-null object
zip        154732 non-null object
dtypes: object(2)
memory usage: 2.4+ MB

更新

这是一个示例CSV文件

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

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

1 个答案:

答案 0 :(得分:1)

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

不要使用map / apply等来查找长度,只需对str.len进行操作即可:

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

不适用于len()的项目会在结果中自动显示为NaN。您可以fillna(-1)来指示结果在那里无效。