熊猫:+不支持的操作数类型:“ float”和“ str”

时间:2019-09-17 18:08:54

标签: python pandas

我有一个约有7000行的.csv文件。我试图通过在python熊猫中对它们进行地理配准来添加经度和纬度。但是现在我收到一个问题“ +不支持的操作数类型:'float'和'str'”。该代码正在运行,并给了我一些输出。我不明白这是什么问题,因为当我检查所需的列的类型时,它们都是字符串类型。

df["lat"]=0.0
df["long"]=0.0
import geocoder
for i in range(1,len(df)) :
    req = df.iloc[i]['country']+','+ df.iloc[i]['province'] +','+ df.iloc[i]['winery']
    g = geocoder.google(req, key='.....')
    if(g.latlng):
        df.set_value(i,'lat',g.latlng[0])
        df.set_value(i,'long',g.latlng[1])

Unnamed: 0      int64
country        object
province       object
region_1       object
winery         object
lat           float64
long          float64
dtype: object

谢谢您的帮助!

-----

TypeError                                 Traceback (most recent call last)
<ipython-input-34-77abfb24b881> in <module>
      4 import geocoder
      5 for i in range(1,len(df)) :
----> 6     req = df.iloc[i]['country']+','+ df.iloc[i]['province'] +','+ df.iloc[i]['winery']
      7     g = geocoder.google(req, key='.....')
      8     if(g.latlng):

TypeError: unsupported operand type(s) for +: 'float' and 'str'

2 个答案:

答案 0 :(得分:0)

根据错误的这一行:

----> 6     req = df.iloc[i]['country']+','+ df.iloc[i]['province'] +','+ df.iloc[i]['winery']

在这些列之一中有一个值,该值是不能字符串连接的浮点类型。如果您不想查找和更正源数据,可以在连接之前每次强制它们str()

赞:

req = str(df.iloc[i]['country']) + ',' + str(df.iloc[i]['province']) + ',' + str(df.iloc[i]['winery'])

如果要更正列并将其强制为字符串,请参见this answer

答案 1 :(得分:0)

由于列类型是通用的 object ,并且由于错误发生在第6行,所以最有可能发生的是,在某个时刻,国家/地区的值 winery 看起来像一个数字,尽管它应该是字符串,但熊猫将其读为 float

您可以通过将所有值强制转换为 string 来解决此问题,无论是整体DataFrame列还是在第6行读取值时。