Looping over all rows isn't necessary.  `self[row][:] = value` or something like that should suffice.

While we're in there maybe we could rename the variable "row" to something like "key".  I think it used to be called "row" because it was always just an integer representing a row number.  But when it can be a slice or a column name as well calling it "row" is pretty confusing.