pandas dataframe单元格设置可变长度列表报错如何解决
错误产生原因
当你使用df.loc[i, 'col3']对单个单元格赋值列表时,pandas会默认将传入的可迭代对象(即列表)尝试匹配到你选中的多个行/列位置,而非将整个列表作为单个值存入单元格。此时pandas会校验列表长度与你选中的单元格数量是否一致,由于你生成的列表长度和选中的1个单元格数量不匹配,就会抛出该ValueError。
规避方法
你可以选择以下任意一种方式实现需求:
- 方法1:替换
loc为专门用于单个单元格标量赋值的at方法,at不会触发可迭代对象的自动展开逻辑,可直接将完整列表存入单元格:
for i in df.index: sample_size = np.random.choice(range(26)) df.at[i,'col3'] = np.random.choice(letters, sample_size).tolist()
- 方法2:先生成和DataFrame长度一致的列表集合,再一次性对整列赋值,该方法在数据量较大时执行效率远高于逐行赋值:
col3_values = [] for _ in range(len(df)): sample_size = np.random.choice(range(26)) col3_values.append(np.random.choice(letters, sample_size).tolist()) df['col3'] = col3_values
- 方法3:使用
apply方法直接生成目标列,代码更简洁:
df['col3'] = df.apply(lambda _: np.random.choice(letters, np.random.choice(range(26))).tolist(), axis=1)
内容的提问来源于stack exchange,提问作者reese565
相关产品推荐
相关产品推荐

