我正在看Choropleth教程
当我试图运行它时,我在第df = df.ix[iso3_codes].dropna()
行遇到了以下错误:
AttributeError: 'DataFrame' object has no attribute 'ix'
看来ix
在熊猫中已经被弃用了
然后,我将行更改为df = df.loc[iso3_codes].dropna()
,但出现以下错误:
KeyError: 'Passing list-likes to .loc or [] with any missing labels is no longer supported
我如何解决这个问题
其他信息
我尝试了df = df.loc[:, iso3_codes].dropna()
,但它给了我以下错误:
KeyError: "None of [Index(['AND', 'ARE', 'AFG', 'ATG',.....'ANT'],\n dtype='object', length=252)] are in the [columns]"
也许loc
对于过滤掉非国家和缺少的值没有用处。我现在怎么做
完整代码
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import slug
from geonamescache import GeonamesCache
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from mpl_toolkits.basemap import Basemap
filename = 'csv/API_AG.LND.FRST.ZS_DS2_en_csv_v2_988532/API_AG.LND.FRST.ZS_DS2_en_csv_v2_988532.csv'
shapefile = 'shapes/countries/countries/ne_10m_admin_0_countries_lakes'
num_colors = 9
year = '2012'
cols = ['Country Name', 'Country Code', year]
title = f'Forest area as percentage of land area in {format(year)}'
imgfile = f'img{slug.slug(title)}.png'
description = '''
Forest area is land under natural or planted strands of trees of at least 5 meters in situ, whether productive or not,
and excludes tree strands in agricultural production systems(for example, in fruit plantations and agroforestry systems)
and trees in urban parks and gardens. Countries without data are shown in grey.
Data: World Bank - worldbank.org | Author: Ramiro Gómez - ramiro.org
'''.strip()
gc = GeonamesCache()
iso3_codes = list(gc.get_dataset_by_key(gc.get_countries(), 'iso3').keys())
df = pd.read_csv(filename, skiprows=4, usecols=cols)
df.set_index('Country Code', inplace=True)
df = df.loc[:, iso3_codes].dropna() # filter out non-countries and missing values
values = df[year]
cm = plt.get_cmap('Greens')
scheme = [cm(i / num_colors) for i in range(num_colors)]
bins = np.linspace(values.min(), values.max(), num_colors)
df['bin'] = np.digitize(values, bins) - 1
df.sort_values('bin', ascending=False).head(10)
df['bin'] = np.digitize(values, bins) - 1
df.sort_values('bin', ascending=False).head(10)
print(f'Available Styles: {plt.style.available}')
mpl.style.use('map')
fig = plt.figure(figsize=(22, 12))
ax = fig.add_subplot(111, facecolor='w', frame_on=False)
fig.suptitle(f'Forest area as percentage of land area in {year}', fontsize=30, y=0.95)
m = Basemap(lon_0=0, projection='robin')
m.drawmapboundary(color='w')
m.readshapefile(shapefile, 'units', color='#444444', linewidth=0.2)
for info, shape in zip(m.units_info, m.units):
iso3 = info['ADM0_A3']
if iso3 not in df.index:
color = '#dddddd'
else:
color = scheme[df.loc[iso3]['bin']]
patches = [Polygon(np.array(shape), True)]
pc = PatchCollection(patches)
pc._set_facecolor(color)
ax.add_collection(pc)
# Cover up Antartica so legend can be placed over it
ax.axhspan(0, 1000 * 1800, facecolor='w', edgecolor='w', zorder=2)
# Draw color legend
ax_legend = fig.add_axes([0.35, 0.14, 0.3, 0.3], zorder=3)
cmap = mpl.colors.ListedColormap(scheme)
cb = mpl.colorbar.ColorbarBase(ax_legend, cmap=cmap, ticks=bins, boundaries=bins, orientation='horizontal')
cb.ax.set_xticklabels([str(round(i, 1)) for i in bins])
# Set the map footer
plt.annotate(description, xy=(-0.8, -3.2), size=14, xycoords=0.2)
plt.show()
完全错误
/Users/me/.pyenv/versions/3.8.1/bin/python /Users/me/PycharmProjects/ChoroplethMap/chloropleth_map.py
Traceback (most recent call last):
File "/Users/me/PycharmProjects/ChoroplethMap/chloropleth_map.py", line 33, in <module>
df = df.loc[:, iso3_codes].dropna() # filter out non-countries and missing values
File "/Users/me/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/core/indexing.py", line 1762, in __getitem__
return self._getitem_tuple(key)
File "/Users/me/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/core/indexing.py", line 1289, in _getitem_tuple
retval = getattr(retval, self.name)._getitem_axis(key, axis=i)
File "/Users/me/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/core/indexing.py", line 1954, in _getitem_axis
return self._getitem_iterable(key, axis=axis)
File "/Users/me/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/core/indexing.py", line 1595, in _getitem_iterable
keyarr, indexer = self._get_listlike_indexer(key, axis, raise_missing=False)
File "/Users/me/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/core/indexing.py", line 1552, in _get_listlike_indexer
self._validate_read_indexer(
File "/Users/me/.pyenv/versions/3.8.1/lib/python3.8/site-packages/pandas/core/indexing.py", line 1640, in _validate_read_indexer
raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Index(['AND', 'ARE', 'AFG', 'ATG', 'AIA', 'ALB', 'ARM', 'AGO', 'ATA', 'ARG',\n ...\n 'VUT', 'WLF', 'WSM', 'YEM', 'MYT', 'ZAF', 'ZMB', 'ZWE', 'SCG', 'ANT'],\n dtype='object', length=252)] are in the [columns]"
替换
与
相关问题 更多 >
编程相关推荐