Есть ли способ сохранить интерполированные значения в фрейме данных python?

Я беру данные с широтой, долготой и значением z и интерполирую их, используя кубический метод. Значения, кажется, сохранены в массиве numpy. Есть ли способ сохранить интерполированные результаты в фрейм данных pandas? Я пытаюсь сохранить его со столбцом значений долготы, широты и z для интерполированного результата.

Входной файл можно найти здесь и называется Nutrition.csv. Вот что я сделал до сих пор:

#Import modules
import pandas as pd
import numpy as np
import os
import shapely
import geopandas as geo
import glob
import holoviews as hv
hv.extension('bokeh')
from scipy.interpolate import griddata, interp2d
import fiona
import gdal
import ogr

#Read file
nut = pd.read_csv('nutrition.csv') #Data to be interpolated

#Minimum and maximum longtude values
lon_min = nut['longitude'].min()
lon_max = nut['longitude'].max()

#Create range of nitrogen values
lon_vec = np.linspace(lon_min, lon_max, 100) #Set grid size

#Find min and max latitude values
lat_min = nut['latitude'].min()
lat_max = nut['latitude'].max()

# Create a range of N values spanning the range from min to max latitude
# Inverse the order of lat_min and lat_max to get the grid correctly
lat_vec = np.linspace(lat_max,lat_min,100,)

# Generate the grid
lon_grid, lat_grid = np.meshgrid(lon_vec,lat_vec)

#Cubic interpolation
points = (nut['longitude'], nut['latitude'])
targets = (lon_grid, lat_grid)
grid_cubic = griddata(points, nut['n_ppm'], targets, method='cubic', fill_value=np.nan)

#Generate the graph
map_bounds=(lon_min,lat_min,lon_max,lat_max)


map_cubic = hv.Image(grid_cubic, bounds=map_bounds).opts(aspect='equal',
                                                         colorbar=True,
                                                         title='Cubic',
                                                         xlabel='Longitude',
                                                         ylabel='Latitude',
                                                         cmap='Reds')

map_cubic

Я думаю, что мне действительно просто нужно найти способ объединить targets сетку с географической привязкой (которая имеет долготу и широту интерполированных точек) и grid_cubic интерполированные данные z-поля в фрейм данных pandas.

лучше покажите примеры данных, что вы получаете в массиве numpy и какой фрейм данных вы ожидаете. И ставить текстом, а не изображением — чтобы можно было просто скопировать и использовать в решениях

furas 22.03.2022 22:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете самостоятельно построить фрейм данных из полученных данных.

df = pd.DataFrame({
    'latitude': lat_grid.reshape(-1),
    'longitude': lon_grid.reshape(-1),
    'value': grid_cubic.reshape(-1)
    });

Давайте проверим данные, преобразованные обратно в numpy и построенные на графике.

import matplotlib.pyplot as plt
plt.pcolor(np.array(df['longitude']).reshape(100, 100),
           np.array(df['latitude']).reshape(100, 100),
           np.array(df['value']).reshape(100, 100))

Обратите внимание, что matplotlib представляет метки осей по-разному, но это те же координаты, что и для ваших исходных данных.

Если вы хотите удалить строки с неопределенным значением из фрейма данных, вы можете использовать что-то вроде этого

df[df['value'].notna()]

Другие вопросы по теме