如何在Pandas DataFrame中存储字符串数组?解决赋值报错问题
解决DataFrame单元格存储字符串数组的ValueError问题
错误原因
报错ValueError: Must have equal len keys and value when setting with an iterable是因为pandas默认会把你赋值的列表当作要分配给多行/多列的元素,而非单个单元格的整体值,因此要求列表长度与目标行/列长度匹配,和你想把整个列表塞进单个单元格的需求冲突,从而触发错误。
三种可行解决方案
- 方法1:用
df.at替代df.locat是pandas专门用于访问单个单元格的方法,可直接把列表赋值给目标单元格:
dataframe.at[x, 'Words'] = words
- 方法2:给
loc赋值时嵌套列表
把要存储的列表包装成一个长度为1的列表,让pandas识别为单个单元格的值:
dataframe.loc[x, 'Words'] = [words]
- 方法3:初始化列时就设置为列表类型
避免初始化为空字符串导致的类型不兼容:
# 初始化列时生成对应长度的空列表 dataframe['Words'] = [[] for _ in range(len(dataframe))] # 直接赋值列表到目标单元格 dataframe.loc[x, 'Words'] = words
完整示例
以你提供的文本为例:
import pandas as pd text = 'Today is a sunny day' words = text.split() # 替代循环append的简洁分词方式 df = pd.DataFrame({'OriginalText': [text]}) # 使用方法1的完整流程 df['Words'] = '' df.at[0, 'Words'] = words # 查看结果 print(df) # 输出: # OriginalText Words # 0 Today is a sunny day [Today, is, a, sunny, day]
内容的提问来源于stack exchange,提问作者A_M_20
相关产品推荐
相关产品推荐

