You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas从DataFrame列生成的列表长度为18而非预期6,如何解决?

问题原因分析

  • 核心错误是使用了嵌套循环:df的a列共有6个元素,cat列表共有3个元素,外层每遍历1个a列元素,内层都会遍历全部3个cat元素,每次遍历都会往cat_list追加1个值,最终总长度为6*3=18,和预期的6个元素不符。
  • 原有逻辑每匹配到正确的cat元素后没有终止内层循环,同时不匹配时直接追加0的逻辑也完全不符合需求。

修正后的代码

写法1:修改循环逻辑(匹配原始写法习惯)

import pandas as pd

d = {'a': [0.1, 0.2,0.3,0.4,0.5,0.6], 'b': [0.6, 0.8,0.3,0.4,0.1,0.1],
     'c': [0.7, 0.3,0.9,0.4,1.0,0.2],'d': [1,0,0,1,0,1]}
df = pd.DataFrame(data=d)

cat=[0.6,0.3,0.1]
cat_list=[]
for i in df.a:
    if i in cat:
        cat_list.append(cat.index(i))
    else:
        cat_list.append(0)

print(cat_list) # 输出 [2, 0, 1, 0, 0, 0]
print(len(cat_list)) # 输出 6

写法2:pandas向量化写法(效率更高,适合大数据量场景)

# 先构建值到索引的映射字典,避免每次调用index方法遍历cat列表
cat_map = {v:idx for idx, v in enumerate(cat)}
# 用map方法匹配,未匹配到的空值填充0后转列表
cat_list = df['a'].map(cat_map).fillna(0).astype(int).tolist()

内容的提问来源于stack exchange,提问作者john johns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:45:02