如何将DataFrame中numpy.ndarray类型列转换为list并解决报错
问题描述
我有如下DataFrame:
| SNo | Values |
|---|---|
| 1 | ['h', 'e', 'l', 'o'] |
| 2 | ['p', 'a', 'r', 'i', 's'] |
| 3 | ['a', 'm', 'e', 'r', 'i', 'c', 'a'] |
执行type(df['Values'][0])后,确认Values列的数据类型为numpy.ndarray。我尝试将该列转为list类型后,执行以下代码:
df[['SNo','Values']].set_index(['SNo']).apply(lambda x: ", ".join(list(x)))
但运行后抛出错误:
TypeError: sequence item 0: expected str instance, numpy.ndarray found
解决方法
报错的核心原因是apply默认按列执行操作,你写的lambda x里的x指代的是整列的numpy.ndarray对象,而非每行的单个数组元素。要实现每行数组转逗号分隔字符串,直接针对Values列处理即可,无需多余操作:
- (可选)将
Values列的numpy数组转为list(numpy数组本身支持直接遍历拼接,这一步不是必须的):
df['Values'] = df['Values'].apply(list)
- 直接对
Values列做字符串拼接:
df['Joined_Values'] = df['Values'].apply(lambda arr: ", ".join(arr))
如果需要将SNo设为索引,可简化为:
result = df.set_index('SNo')['Values'].apply(lambda arr: ", ".join(arr))
执行后就能得到每行数组对应的逗号分隔字符串,不会再触发类型错误。
内容的提问来源于stack exchange,提问作者Krishna
相关产品推荐
相关产品推荐

