Python:DataFrame每行数组有放回抽随机数时长度不匹配错误排查
问题分析与解决
错误原因
你的列表推导式用了两层嵌套循环:
- 第一层
for i in df是遍历DataFrame的所有列(共11列) - 第二层
for j in df[i]是遍历该列下的800行数组
最终生成的列表总长度是列数 × 行数(比如11×800=8800),但你的DataFrame只有800行,把长度远大于800的列表赋值给新列时,就会触发Length of values does not match length of index错误。
修正方案
你的需求是对每行的所有列数组合并后抽取1000个有放回样本,以下是两种可行的实现方式:
方式一:使用df.apply逐行处理
import numpy as np import pandas as pd n = 1000 def process_row(row): # 拼接当前行所有列的数组为一维数组 full_array = np.concatenate(row.values) # 抽取n个有放回随机样本 return np.random.choice(full_array, size=n, replace=True) df['rand_sample'] = df.apply(process_row, axis=1)
方式二:使用iterrows遍历行的列表推导式
n = 1000 df['rand_sample'] = [ np.random.choice(np.concatenate(row), size=n, replace=True) for _, row in df.iterrows() ]
说明
两种方式都是遍历DataFrame的800行,每行生成一个长度为1000的样本数组,最终生成的列表长度为800,与DataFrame的行数完全匹配,因此可以成功赋值到新列rand_sample中。
内容的提问来源于stack exchange,提问作者Xavier
相关产品推荐
相关产品推荐

