我正在尝试使用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个赞
这很可能是因为您在State
Column中缺少值,请在查找字符串之前解决此问题,然后检查该值是否丢失。
df['State'].apply(lambda x: x[x.find("(")+1:x.find(")")] if pd.notnull(x) else x)
慕妹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
添加回答
举报
0/150
提交
取消