我有一个约有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'
答案 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行读取值时。