reimplementation of DataFrame. its proxies now take into account the structure of the data frame and prevent making invalid data frames