如何自动化生成含可变mag列的随机测试DataFrame?
自动化生成星系观测数据DataFrame
需求说明
需要实现可复用函数random_df,通过df = random_df(size=(N, M))的调用方式,生成包含N个星系、M列mag观测值的DataFrame,结构与示例完全匹配:
Name列:自动命名为Galaxy 1到Galaxy Nmag1~magM列:取值范围10-20的随机浮点数,随机位置包含NaN值redshift列:取值范围0.01-5的随机浮点数,无NaN
实现代码
import numpy as np import pandas as pd def random_df(size=(10, 3)): n_galaxies, n_mag_cols = size # 生成Name列 name_col = [f"Galaxy {i+1}" for i in range(n_galaxies)] # 生成带随机NaN的mag列 mag_cols = [] for _ in range(n_mag_cols): # 生成基础随机数值 mag_vals = np.random.uniform(10, 20, n_galaxies) # 随机选1-2个位置设为NaN(可按需调整NaN数量) nan_indices = np.random.choice(n_galaxies, np.random.randint(1,3), replace=False) mag_vals[nan_indices] = np.nan mag_cols.append(mag_vals) # 生成无NaN的redshift列 redshift_col = np.random.uniform(0.01, 5, n_galaxies) # 拼接成DataFrame并设置列名 col_names = ["Name"] + [f"mag{i+1}" for i in range(n_mag_cols)] + ["redshift"] df = pd.DataFrame(np.column_stack([name_col] + mag_cols + [redshift_col]), columns=col_names) # 修正数值列类型 for col in col_names[1:]: df[col] = df[col].astype(float) return df
使用示例
调用函数生成20个星系、5列mag的DataFrame:
df = random_df(size=(20, 5)) print(df.head())
输出示例(随机生成,结果不固定):
Name mag1 mag2 mag3 mag4 mag5 redshift 0 Galaxy 1 12.345678 NaN 15.678901 18.123456 11.987654 0.5678 1 Galaxy 2 19.876543 13.234567 14.567890 NaN 17.876543 2.3456 2 Galaxy 3 NaN 16.789012 12.123456 15.432109 18.901234 3.9876 3 Galaxy 4 14.567890 18.901234 NaN 13.678901 12.345678 1.2345 4 Galaxy 5 17.890123 11.234567 19.432109 16.789012 NaN 4.5678
代码说明
- Name列:通过列表推导式自动生成连续命名的星系名称
- mag列:每列先生成10-20的随机浮点数,再随机选择1-2个位置替换为NaN(可修改
np.random.randint(1,3)调整NaN数量范围) - redshift列:直接生成0.01-5的随机浮点数,确保无缺失值
- 类型修正:由于拼接时数值列会被转为object类型,最后统一转换为float保证数据类型正确
内容的提问来源于stack exchange,提问作者Jim421616
相关产品推荐
相关产品推荐

