Welcome to Software Development on Codidact!
Will you help us build our independent community of developers helping developers? We're small and trying to grow. We welcome questions about all aspects of software development, from design to code to QA and more. Got questions? Got answers? Got code you'd like someone to review? Please join us.
How to resolve a "ValueError: dimension 't' already exists as a scalar variable" arising when I am using xarray.Dataset.assign_coords()?
I have the following xarray Dataset
:
d: <xarray.Dataset>
Dimensions: (x: 79, y: 63, t: 1)
Coordinates:
* x (x) float64 0.9412 1.882 2.824 3.765 ... 71.53 72.47 73.41 74.35
* y (y) float64 59.29 58.35 57.41 56.47 ... 3.765 2.824 1.882 0.9412
* t (t) int32 0
Data variables:
u (x, y, t) float64 0.0 0.0 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0 0.0
v (x, y, t) float64 -0.0 -0.0 -0.0 -0.0 -0.0 ... -0.0 -0.0 -0.0 -0.0
chc (x, y, t) float64 1.0 1.0 1.0 1.0 1.0 1.0 ... 1.0 1.0 1.0 1.0 1.0
Attributes: (2)
When I try to assign new values to the coordinate t
, using d = d.assign_coords(t = 0.123)
, I receive an error:
ValueError: dimension 't' already exists as a scalar variable
How can I resolve the error and assign a new value to the t
coordinate?
I have tried the solutions to the similar problems posted on Stack Overflow, such as
-
assign_coords
is not an inplace operation - recreate
t
as a coordinate and then assign the value to it - change the type of
t
tofloat
- using dictionary:
d = d.assign_coords({'t':0.123})
I suspect that the asterisk next to the name of my coordinate t
has something to do with the error. But I don't understand what it means; I could only find that it is a reference to something called "proper coordinate".
1 answer
The following users marked this post as Works for me:
User | Comment | Date |
---|---|---|
Ivan Nepomnyashchikh |
Thread: Works for me The solution worked. The explanation is clear. Thank you very much @mr Tsjolder ! |
Aug 16, 2023 at 20:24 |
It seems like what you want to do can be achieved by using
data.assign_coords(t=[0.123])
The error message is extremely confusing in this respect, but it seems like the new value for the coordinate must have the same shape as the original coordinate value.
In this case, data.t.shape
would output (1, )
, which corresponds to the shape of a vector.
Therefore, you also have to specify a vector-like input.
Here, I used a list, but you could also use a numpy array or compute the new entry from the original value, e.g.
data.assign_coords(t=data.t + 0.123)
Of course, this assumes that data.t
is zero everywhere (and not just on the edges).
1 comment thread