Python Pandas TypeError:类型为';浮动';没有len()
我正在使用Python/Pandas进行一些数据发现 MVCE:我有一个带有一些街道地址的CSV文件,我想找到文件中最长地址的长度。(这是我实际问题的简化版本) 我编写了以下简单的Python代码: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
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()