为了账号安全,请及时绑定邮箱和手机立即绑定

在Lambda中使用find()时发生属性错误

在Lambda中使用find()时发生属性错误

紫衣仙女 2021-04-02 17:15:57
我正在尝试使用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 Program0  South Carolina\n(33.99882060100049, -81.045367...                        63.0                       3.5                         25.0            ...                                 49.0        24.0                                 111.0                     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上的熊猫,但不能完全明白的结论,除了推断float类型的不正确。有什么建议么?提前致谢。
查看完整描述

2 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

这很可能是因为您在StateColumn中缺少值,请在查找字符串之前解决此问题,然后检查该值是否丢失。

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


查看完整回答
反对 回复 2021-04-09
?
慕妹3242003

TA贡献1824条经验 获得超6个赞

str.extract 与正则表达式一起使用


前任:


import pandas as pd

df = pd.DataFrame({"State": ["South Carolina\n(33.99882060100049, -81.045367)"]})

print( df["State"].str.extract(r"\((.*?)\)") )

输出:


                               0

0  33.99882060100049, -81.045367

注意:您收到错误消息是因为其中的某些数据State是NaN


查看完整回答
反对 回复 2021-04-09
  • 2 回答
  • 0 关注
  • 324 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信