Python 在lambda中使用find()时出现属性错误

Python 在lambda中使用find()时出现属性错误,python,pandas,dataframe,Python,Pandas,Dataframe,我试图使用lambda和find()从数据帧中提取纬度和经度坐标 数据帧如下所示 df.head(1) State Number of Fatalities, 2012 Rate of Fatalities, 2012 State Rank, Fatalities 2012 ... Penalties FY 2013 (Rank) Inspectors

我试图使用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(")")])
下面是一个state列值的示例:
westvirginia\n(38.665511497000466,-80.71263935099967)

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

AttributeError: 'float' object has no attribute 'find'
我四处搜索,发现github上关于熊猫的类似错误报告,但不能完全理解结论,只是推断的浮点类型不正确


有什么建议吗?提前感谢。

这很可能是因为在
状态
列中缺少值,在查找字符串之前,请检查该值是否丢失

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

这很可能是因为在
State
列中缺少值,在找到字符串之前检查该值是否缺少,应该这样做

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

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

Ex:

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
输出:

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
  • 注意:出现错误是因为处于
    状态的部分数据是
    NaN

使用带有正则表达式的
str.extract

Ex:

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
输出:

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
  • 注意:出现错误是因为处于
    状态的部分数据是
    NaN

Python不会推断类型。如果得到该属性错误,则得到的值是一个
float
实例。如果得到该属性错误,则得到的值是一个
float
实例。