首页 > 解决方案 > 在 lambda 中使用 find() 时出现属性错误

问题描述

我正在尝试使用 lambda 并find()从数据框中提取纬度和经度坐标。

数据框如下

df.head(1)

                                           State  Number of Fatalities, 2012  Rate of Fatalities, 2012  State Rank, Fatalities 2012            ...             Penalties FY 2013 (Rank)  Inspectors  Years to Inspect Each Workplace Once  State or Federal Program
0  South Carolina\n(33.99882060100049, -81.045367...                        63.0                       3.5                         25.0            ...                                 49.0        24.0                                 111.0                     State

我正在尝试使用以下内容从 state 列中获取坐标。

df['State'].apply(lambda x: x[x.find("(")+1:x.find(")")])

以下是状态列值之一的示例:West Virginia\n(38.665511497000466, -80.71263935099967)

但每次我这样做时,我都会收到以下错误:

AttributeError: 'float' object has no attribute 'find'

我进行了搜索,发现在 github 上针对 Pandas 报告了类似的错误但除了推断的 float 类型不正确外,不能完全理解结论。

有什么建议么?提前致谢。

标签: pythonpandasdataframe

解决方案


这很可能是因为您在State列中缺少值,在找到字符串之前检查值是否丢失应该可以解决问题。

df['State'].apply(lambda x: x[x.find("(")+1:x.find(")")] if pd.notnull(x) else x)

推荐阅读