Pandas如何将列表循环填充为DataFrame新列匹配总行数
报错根因
你写的cat_list * len(df)存在长度计算错误:cat_list本身长度是3,和整数len(df)做乘法后,得到的列表总长度是3 * len(df),和DataFrame的行数len(df)不相等,自然会报长度不匹配的错误。
可直接运行的修正代码
方案1:纯Python实现,无需引入额外依赖
只需要先计算足够覆盖DataFrame行数的重复次数,拼接后截断到和DataFrame等长即可:
cat_list = ['a', 'b', 'ab'] # 向上取整计算重复次数,保证拼接后的列表长度不小于df行数 repeat_count = len(df) // len(cat_list) + 1 df['category'] = (cat_list * repeat_count)[:len(df)]
方案2:numpy实现,代码更简洁
pandas环境默认预装numpy,可以直接用np.tile实现序列重复:
import numpy as np cat_list = ['a', 'b', 'ab'] df['category'] = np.tile(cat_list, len(df) // len(cat_list) + 1)[:len(df)]
方案3:迭代器实现,大文件场景内存占用更低
当DataFrame行数特别大时,可以用itertools.cycle构造循环迭代器,逐行生成填充值,不需要提前构造完整列表:
from itertools import cycle cat_list = ['a', 'b', 'ab'] loop_cats = cycle(cat_list) df['category'] = [next(loop_cats) for _ in range(len(df))]
以上三种方案都可以实现预期的循环填充效果,填充顺序完全匹配示例:第一行填a、第二行填b、第三行填ab,之后循环往复直到最后一行。
内容的提问来源于stack exchange,提问作者yangyang
相关产品推荐
相关产品推荐

