Python堆栈丢失数据
我正在尝试重新组织数据(首要目标是将ASCII文件转换为netCDF)。其中一个步骤是获取数据并堆叠列。我的原始数据如下所示:Python堆栈丢失数据,python,pandas,ascii,Python,Pandas,Ascii,我正在尝试重新组织数据(首要目标是将ASCII文件转换为netCDF)。其中一个步骤是获取数据并堆叠列。我的原始数据如下所示: import pandas as pd import numpy as np import xarray as xr fname = 'data.out' df = pd.read_csv(fname, header=0, delim_whitespace=True) print(df) 给予 然后我选择实际的时间步 months=list(df.columns)
import pandas as pd
import numpy as np
import xarray as xr
fname = 'data.out'
df = pd.read_csv(fname, header=0, delim_whitespace=True)
print(df)
给予
然后我选择实际的时间步
months=list(df.columns)
months=months[3:]
并选择包含月度数据的所有列。然后返回形状
print(df[months].shape)
(708000,12)。到目前为止还不错,但是当我堆叠数据时
df_stack = df[months].stack()
print(df_stack.shape)
我得到的不是预期的形状((8496000,)而是(8493000,)。奇怪的是,脚本运行在其他文件上,这些文件的形状与我在本例中使用的数据相同,我没有这个问题。看起来我在250年内丢失了一个Lon/Lat像素-但我不明白为什么?当我尝试将数据转换为netcdf文件时,这会成为一个问题
lons = np.unique(df.Lon)
lats = np.unique(df.Lat)
years = np.unique(df.Year)
nyears = len(years)
nrows = len(lats)
ncols = len(lons)
nmonths = 12
lons.sort()
lats.sort()
years.sort()
time = pd.date_range(start=f'01/{years[0]}',
end=f'01/{years[-1]+1}', freq='M')
dx = 0.5
Lon = xr.DataArray(np.arange(-180.+dx/2., 180., dx), dims=("Lon"),
attrs={"long_name":"longitude", "unit":"degrees_east"})
nlon = Lon.size
dy = 0.5
Lat = xr.DataArray(np.arange(-90.+dy/2., 90., dy), dims=("Lat"),
attrs={"long_name":"latitude", "unit":"degrees_north"})
nlat = Lat.size
out = xr.DataArray(np.zeros((nyears*nmonths,nlat, nlon)),
dims=("Time","Lat","Lon"),
coords=({"Lat":Lat, "Lon":Lon, "Time":time}))
for nr in range(0,len(df.index),nyears):
rows = df[nr:nr+nyears]
thislon = rows["Lon"].min()
thislat = rows["Lat"].min()
out.loc[dict(
Lon=thislon,
Lat=thislat)] = df_stack[nr*nmonths:(nr+nyears)*nmonths]
- 这给了我一个错误
df_stack = df[months].stack()
借
是否有任何
na
的地方?stack()
默认情况下会删除NAs。
ValueError: could not broadcast input array from shape (0,) into shape (3000,)
df_stack = df[months].stack()
df_stack = df[months].stack(dropna=False)