合并包含字符串的列和包含浮点数的列

时间:2018-05-27 18:43:52

标签: python pandas geopandas

我有一个(geo)数据框,其中包含一个包含位置名称的列和一个包含浮点数的列,我希望将它们合并。

在geopandas中使用cities数据集的示例(带有一个额外的列):

 Name          geometry    GDP
Vatican City  POINT(...)  20353.42

我想合并他们,所以我有:梵蒂冈城:20353.42 我尝试了什么:

cities['name-gdp'] = cities['name'].astype(str).str.cat(cities['GDP'], sep =': ')

但是我收到以下错误: TypeError:序列项1:预期的str实例,找到float

1 个答案:

答案 0 :(得分:4)

似乎需要将float GDP列转换为string s:

cities['name-gdp'] = cities['name'].str.cat(cities['GDP'].astype(str), sep =': ')

但是如果某些NaN并且需要输出为NaN s:

cities = pd.DataFrame({'name':['q','w','e'], 'GDP':[10.5,20.3, np.nan]})
print (cities)
    GDP name
0  10.5    q
1  20.3    w
2   NaN    e

gdp = cities['GDP'].mask(cities['GDP'].notnull(),cities['GDP'].astype(str))
print (gdp)
0    10.5
1    20.3
2     NaN
Name: GDP, dtype: object

print (gdp.apply(type))
0      <class 'str'>
1      <class 'str'>
2    <class 'float'>
Name: GDP, dtype: object

cities['name-gdp'] = cities['name'].astype(str).str.cat(gdp, sep =': ')
print (cities)
    GDP name name-gdp
0  10.5    q  q: 10.5
1  20.3    w  w: 20.3
2   NaN    e      NaN

第一种解决方案也可以使用,但随后使用字符串nan并获取:

cities['name-gdp'] = cities['name'].str.cat(cities['GDP'].astype(str), sep =': ')
print (cities)
     GDP name name-gdp
0  10.5    q  q: 10.5
1  20.3    w  w: 20.3
2   NaN    e   e: nan