python - 在 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 类型不正确外,不能完全理解结论。
有什么建议么?提前致谢。
解决方案
这很可能是因为您在State
列中缺少值,在找到字符串之前检查值是否丢失应该可以解决问题。
df['State'].apply(lambda x: x[x.find("(")+1:x.find(")")] if pd.notnull(x) else x)
推荐阅读
- blazor-webassembly - 如何将 Blazor Wasm 应用程序放入 HTML 自定义元素中?
- azure - 如何从 powershell 脚本中的调用 lambda 函数引用输出变量?
- html - 通过 google chrome 控制台从网站添加视频
- javascript - 有关您单击的选项的信息 - React
- javascript - 大于 100vh 的部分的 CSS translateY 口吃
- typescript - 如何在 Typescript 中使用可变元组类型?
- java - 如何动画线图(mpandroidchart)?
- laravel - 我如何插入多个图像 Laravel / VUE / Axios
- python - Dash - 具有多个可能仪表板的多用户
- python - 稀疏线性方法 (SLIM) 包的替代方案