Объединить столбец, содержащий строки, со столбцом, содержащим числа с плавающей точкой - PullRequest
0 голосов
/ 27 мая 2018

У меня есть (гео) фрейм данных со столбцом с именами местоположений и столбцом с поплавками, и я хочу объединить их.

Пример с набором данных городов в геопандах (с дополнительным столбцом):

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

Я хочу объединить их, поэтому у меня есть: Vatican City: 20353.42 То, что я пробовал:

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

Но я получаю следующую ошибку: TypeError: элемент последовательности 1: ожидаемый экземпляр str, floatнайдены

1 Ответ

0 голосов
/ 27 мая 2018

Кажется, нужно преобразовать столбец с плавающей точкой GDP в string s:

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

Но если некоторые NaN s и нужно вывести как 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
...