首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Pandas TypeError:'float‘类型的对象没有len()

Pandas TypeError:'float‘类型的对象没有len()
EN

Stack Overflow用户
提问于 2018-07-22 07:32:39
回答 2查看 12.2K关注 0票数 1

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

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

我写了这个简单的Python代码:

代码语言:javascript
复制
import sys
import pandas as pd

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

print(df['address'].map(len).max())

address列的类型是str,或者我认为是这样(见下文)。

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

代码语言:javascript
复制
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()的输出

代码语言:javascript
复制
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文件

代码语言:javascript
复制
address,zip
555 APPLE STREET,82101
1180 BANANA LAKE ROAD,81913
577 LEMON DR,81911
,99999

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-07-22 08:04:16

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

不要使用map/apply等来查找长度,只需使用str.len即可

代码语言:javascript
复制
df['address'].str.len()

len()不适用的项目会在结果中自动显示为NaN。你可以fillna(-1)出那些来表明结果在那里是无效的。

票数 3
EN

Stack Overflow用户

发布于 2021-10-19 19:05:12

我的解决方案是使用空字符串执行fillNa,然后尝试运行apply,如下所示:

代码语言:javascript
复制
df['address'].fillna('', inplace=True)
print(df['address'].map(len).max())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51460881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档