in core/maxframe/dataframe/utils.py [0:0]
def build_df(df_obj, fill_value=1, size=1, ensure_string=False):
dfs = []
if not isinstance(size, (list, tuple)):
sizes = [size]
else:
sizes = size
if not isinstance(fill_value, (list, tuple)):
fill_values = [fill_value]
else:
fill_values = fill_value
from .core import INDEX_TYPE, SERIES_TYPE
dtypes = (
pd.Series([df_obj.dtype], index=[df_obj.name])
if isinstance(df_obj, (INDEX_TYPE, SERIES_TYPE))
else df_obj.dtypes
)
for size, fill_value in zip(sizes, fill_values):
record = [[_generate_value(dtype, fill_value) for dtype in dtypes]] * size
df = pd.DataFrame(record)
df.columns = dtypes.index
if len(record) != 0: # columns is empty in some cases
target_index = df_obj.index_value.to_pandas()
if isinstance(target_index, pd.MultiIndex):
index_val = tuple(
_generate_value(level.dtype, fill_value)
for level in target_index.levels
)
df.index = pd.MultiIndex.from_tuples(
[index_val] * size, names=target_index.names
)
else:
index_val = _generate_value(target_index.dtype, fill_value)
df.index = pd.Index([index_val] * size, name=target_index.name)
# make sure dtypes correct
for i, dtype in enumerate(dtypes):
s = df.iloc[:, i]
if not pd.api.types.is_dtype_equal(s.dtype, dtype):
df[df.columns[i]] = s.astype(dtype)
dfs.append(df)
if len(dfs) == 1:
ret_df = dfs[0]
else:
ret_df = pd.concat(dfs)
if ensure_string:
obj_dtypes = dtypes[dtypes == np.dtype("O")]
ret_df[obj_dtypes.index] = ret_df[obj_dtypes.index].radd("O")
return ret_df