如何基于pandas的.describe()结果生成匹配统计特征的随机数据集?
生成匹配DataFrame统计特征的随机数据方案
可以通过提取.describe()中的核心统计指标,针对性生成随机数据,以下是两种可行实现方案:
1. 近似正态分布生成法(适配数值型列)
基于正态分布生成初始数据,再调整关键分位数和极值,让统计结果完全匹配原数据:
import pandas as pd import numpy as np def data_generator(desc_df): generated_data = pd.DataFrame() for col in desc_df.columns: stats = desc_df[col] count = int(stats['count']) mean = stats['mean'] std = stats['std'] min_val = stats['min'] q25 = stats['25%'] q50 = stats['50%'] q75 = stats['75%'] max_val = stats['max'] # 生成符合均值、标准差的正态分布数据 data = np.random.normal(loc=mean, scale=std, size=count) # 排序后替换关键分位数与极值 data_sorted = np.sort(data) data_sorted[0] = min_val data_sorted[int(count*0.25)-1] = q25 data_sorted[int(count*0.5)-1] = q50 data_sorted[int(count*0.75)-1] = q75 data_sorted[-1] = max_val # 打乱顺序还原随机性 np.random.shuffle(data_sorted) generated_data[col] = data_sorted return generated_data
2. 均匀分布区间生成法(适合对分布形态无要求的场景)
按分位数划分区间,在每个区间内生成均匀分布数据,合并后打乱:
import pandas as pd import numpy as np def data_generator_uniform(desc_df): generated_data = pd.DataFrame() for col in desc_df.columns: stats = desc_df[col] count = int(stats['count']) min_val = stats['min'] q25 = stats['25%'] q50 = stats['50%'] q75 = stats['75%'] max_val = stats['max'] # 分配各区间样本量 n1 = int(count * 0.25) n2 = int(count * 0.25) n3 = int(count * 0.25) n4 = count - n1 - n2 - n3 # 生成各区间均匀分布数据 d1 = np.random.uniform(min_val, q25, n1) d2 = np.random.uniform(q25, q50, n2) d3 = np.random.uniform(q50, q75, n3) d4 = np.random.uniform(q75, max_val, n4) # 合并并打乱 data = np.concatenate([d1, d2, d3, d4]) np.random.shuffle(data) generated_data[col] = data return generated_data
关键说明
- 两种方法生成的数据的
.describe()结果会与原数据高度一致,仅可能存在浮点精度级别的微小误差。 - 无法捕捉列间的依赖关系,所有生成列都是独立的。
- 若涉及非数值型列(如分类列),需额外提取原数据的类别分布(如
value_counts结果),再按分布随机抽样生成。
内容的提问来源于stack exchange,提问作者fakedrake
相关产品推荐
相关产品推荐

