def append_rows(self, indexes, values, new_cols=True):
        for column in values:
            if len(values[column]) > len(indexes):
                raise ValueError('length of %s column in values is longer than indexes' % column)
        combined_index = self._index + indexes
        if len(set(combined_index)) != len(combined_index):
            raise IndexError('duplicate indexes in DataFrames')
        if new_cols:
            for col in values:
                if col not in self._columns:
                    self._add_column(col)
        self._index.extend(indexes)
        for c, col in enumerate(self._columns):
            self._data[c].extend(values.get(col, [None] * len(indexes)))
        self._pad_data()