in core/maxframe/dataframe/indexing/getitem.py [0:0]
def __call__(self, df):
if self.col_names is not None:
# if col_names is a list, return a DataFrame, else return a Series
col_names = self.col_names
if not isinstance(col_names, list):
col_names = [col_names]
is_list = False
else:
is_list = True
dtypes_list = df._get_dtypes_by_columns(col_names)
if is_list or len(dtypes_list) > 1:
if len(col_names) != len(dtypes_list):
col_names = df._get_columns_by_columns(col_names)
columns = parse_index(pd.Index(col_names), store_data=True)
return self.new_dataframe(
[df],
shape=(df.shape[0], len(col_names)),
dtypes=pd.Series(dtypes_list, index=col_names, dtype=np.dtype("O")),
index_value=df.index_value,
columns_value=columns,
)
else:
dtype = dtypes_list[0]
return self.new_series(
[df],
shape=(df.shape[0],),
dtype=dtype,
index_value=df.index_value,
name=self.col_names,
)
else:
if isinstance(self.mask, (SERIES_TYPE, DATAFRAME_TYPE, TENSOR_TYPE)):
index_value = parse_index(
pd.Index(
[],
dtype=df.index_value.to_pandas().dtype,
name=df.index_value.name,
),
df,
self.mask,
)
return self.new_dataframe(
[df, self.mask],
shape=(np.nan, df.shape[1]),
dtypes=df.dtypes,
index_value=index_value,
columns_value=df.columns_value,
)
else:
index_value = parse_index(
pd.Index(
[],
dtype=df.index_value.to_pandas().dtype,
name=df.index_value.name,
),
df,
self.mask,
)
return self.new_dataframe(
[df],
shape=(np.nan, df.shape[1]),
dtypes=df.dtypes,
index_value=index_value,
columns_value=df.columns_value,
)