Because if you are using only the X (width) size of an array to stock values, you don't need to indicate the Y and Z locations.
So
Set Player.maxHP to Playerstats.at(2) is enough
Getting a 0 out of an array cell often means the cell doesn't exist/is blank.
Also if Player.maxHP is a number instance variable you might need to cast the result returned from the array.
The values stored in arrays are string, you need to convert them when affecting them to numbers.
Set Player.maxHP to int(Playerstats.at(2))
(int() will return integer number, float() will return a float number)
In the how do I FAQ, section "Arrays" you have several topics on the subject that explains the very same thing.
You can, for example, find that commented capx.