def _reindex_columns(self, columns: Optional[Union[(pd.Index, Sequence[Any])]], fill_value: Optional[Any]) -> 'DataFrame':
    level = self._internal.column_labels_level
    if (level > 1):
        label_columns = list(columns)
        for col in label_columns:
            if (not isinstance(col, tuple)):
                raise TypeError('Expected tuple, got {}'.format(type(col).__name__))
    else:
        label_columns = [(col,) for col in columns]
    for col in label_columns:
        if (len(col) != level):
            raise ValueError("shape (1,{}) doesn't match the shape (1,{})".format(len(col), level))
    fill_value = (np.nan if (fill_value is None) else fill_value)
    scols_or_pssers: List[Union[(Series, Column)]] = []
    labels = []
    for label in label_columns:
        if (label in self._internal.column_labels):
            scols_or_pssers.append(self._psser_for(label))
        else:
            scols_or_pssers.append(SF.lit(fill_value).alias(name_like_string(label)))
        labels.append(label)
    if isinstance(columns, pd.Index):
        column_label_names = [(name if is_name_like_tuple(name) else (name,)) for name in columns.names]
        internal = self._internal.with_new_columns(scols_or_pssers, column_labels=labels, column_label_names=column_label_names)
    else:
        internal = self._internal.with_new_columns(scols_or_pssers, column_labels=labels)
    return DataFrame(internal)
def _reindex_columns(self, columns: Optional[Union[(pd.Index, Sequence[Any])]], fill_value: Optional[Any]) -> 'DataFrame':
    level = self._internal.column_labels_level
    if (level > 1):
        label_columns = list(columns)
        for col in label_columns:
            if (not isinstance(col, tuple)):
                raise TypeError('Expected tuple, got {}'.format(type(col).__name__))
    else:
        label_columns = [(col,) for col in columns]
    for col in label_columns:
        if (len(col) != level):
            raise ValueError("shape (1,{}) doesn't match the shape (1,{})".format(len(col), level))
    fill_value = (np.nan if (fill_value is None) else fill_value)
    scols_or_pssers: List[Union[(Series, Column)]] = []
    labels = []
    for label in label_columns:
        if (label in self._internal.column_labels):
            scols_or_pssers.append(self._psser_for(label))
        else:
            scols_or_pssers.append(SF.lit(fill_value).alias(name_like_string(label)))
        labels.append(label)
    if isinstance(columns, pd.Index):
        column_label_names = [(name if is_name_like_tuple(name) else (name,)) for name in columns.names]
        internal = self._internal.with_new_columns(scols_or_pssers, column_labels=labels, column_label_names=column_label_names)
    else:
        internal = self._internal.with_new_columns(scols_or_pssers, column_labels=labels)
    return DataFrame(internal)