Как я могу построить столбец, полный значений nan?Python

Программы на Python
Ответить
Anonymous
 Как я могу построить столбец, полный значений nan?

Сообщение Anonymous »

У меня есть код, который обрабатывает файл GeoJSON и отображает столбцы из этого файла один за другим, чтобы показать пользователю затраты на оптимизацию. Все работало нормально, пока не натолкнулось на столбец, содержащий только значения nan.
Я немного изучил это и обнаружил, что файл построения графика GeoPandas (v0.14.4) сначала создает список, значения — нан:

Код: Выделить всё

nan_idx = np.asarray(pd.isna(values), dtype="bool")
затем он сбрасывает переменную значений, чтобы она содержала все значения, кроме nan:

Код: Выделить всё

values = cat.codes[~nan_idx]
а затем он заполняет nans заполнителем, чтобы можно было правильно их отобразить:

Код: Выделить всё

for n in np.where(nan_idx)[0]:
values = np.insert(values, n, values[0])
и вот в чем проблема! Поскольку столбец содержит только nans, я получаю IndexError из значений [0], поскольку теперь он пуст. Это было подтверждено изменением одного значения на число с плавающей запятой, и оно работало отлично; отображение nans как пропущенных значений.
Может ли кто-нибудь сказать мне, есть ли другой способ построения столбцов, содержащих все значения nan, или эта проблема была разработана в более новых версиях GeoPandas? Важно показать, что все значения являются «пропущенными значениями», поскольку это просто покажет, что этот конкретный столбец невозможен.
Весь приведенный выше код находится в файле geopandas/plotting. py для GeoPandas (v0.14.4) и происходит внутри функцииplot() в фрагменте моего кода ниже (где name — это имя столбца, а шестиугольники относятся к Geopandas df):

Код: Выделить всё

import geopandas as gpd
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

def plot_and_save(crs, name, legend_kwds, output_folder, figsize=(10,5), legend=True, cmap='viridis_r',
missing_kwds={"color": "lightgrey", "label": "Missing values",},
bbox_inches="tight",
):
fig = plt.figure(figsize=figsize)
ax = plt.axes(projection=crs)
ax.set_axis_off()

hexagons.to_crs(crs.proj4_init).plot(
ax=ax,
column = name,
legend = legend,
cmap = cmap,
legend_kwds = legend_kwds,
missing_kwds = missing_kwds,
)

ax.set_title(name)
fig.savefig(output_folder + f"/{name}.png", bbox_inches=bbox_inches)
plt.close()

hexagons = gpd.read_file("results/hexfile.geojson")

hexagon_bounds = hexagons.geometry.bounds
min_lon, min_lat = hexagon_bounds[['minx','miny']].min()
max_lon, max_lat = hexagon_bounds[['maxx','maxy']].max()

central_lon = (min_lon + max_lon)/2
central_lat = (min_lat + max_lat)/2

crs = ccrs.Orthographic(central_longitude = central_lon, central_latitude= central_lat)

output_folder = 'plots/results'

plot_and_save(crs, 'pipeline transport costs', {'label':'pipeline cost [euros/kg]'}, output_folder)
Вот как выглядит график, если в нем есть значения для всего:
[img]https://i.sstatic.net /AwXE6l8J.png[/img]

И вот график, который имеет только одно значение, я бы хотел, чтобы график был полностью выделен серым цветом:
Изображение


Подробнее здесь: https://stackoverflow.com/questions/792 ... nan-values
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»