猿问

在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

我正在尝试使用以下方法从状态列中获取坐标。


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类型的不正确。


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


紫衣仙女
浏览 325回答 2
2回答

慕神8447489

这很可能是因为您在StateColumn中缺少值,请在查找字符串之前解决此问题,然后检查该值是否丢失。df['State'].apply(lambda x: x[x.find("(")+1:x.find(")")] if pd.notnull(x) else x)

慕妹3242003

str.extract 与正则表达式一起使用前任:import pandas as pddf = pd.DataFrame({"State": ["South Carolina\n(33.99882060100049, -81.045367)"]})print( df["State"].str.extract(r"\((.*?)\)") )输出:                               00  33.99882060100049, -81.045367注意:您收到错误消息是因为其中的某些数据State是NaN
随时随地看视频慕课网APP

相关分类

Python
我要回答