我有一个DataFrame DF,如下所示:
| Sno|值|
| --|--|
| 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
。
我正在尝试将列“Values”的数据类型转换为“list”以执行以下操作:
df[['SNo','Values']].set_index(['SNo']).apply(lambda x: ", ".join(list(x)))
在运行上面的代码时,我得到了错误:
TypeError: sequence item 0: expected str instance, numpy.ndarray found
4条答案
按热度按时间hgtggwj01#
通过展平ND数组来确保没有ND数组,并使用
applymap
:输出量:
或者对于单个列:
输出量:
41zrol4v2#
您尝试从值创建一个新字符串,而不是
list
。请尝试:图纸:
q9rjltbz3#
你可以使用
numpy.char.join()
方法代替默认的python方法来连接一个字符到列表。document link结果:
| Sno|值|
| --|--|
| 1 |helo|
| 2 |巴黎|
| 3 |美国|
xmd2e60i4#
我想你把
df.apply
和Series.apply
弄混了。df.apply
沿轴(默认情况下是按列)沿着应用一个函数,这样你就可以有效地连接一个包含 * 数组 * 的Series(列“Values”),这是不可能的:传递给str.join
的 iterable 只能包含 strings。因此,您的TypeError
:第一个元素(“序列项0”)将是np.array(['h', 'e', 'l', 'o'])
。另一方面,
Series.apply
将函数应用于Series中的 values。例如,它将在单个 * 数组 * 上使用join
。这就是我们想要的在join
中不需要list
,因为数组也是可迭代的。因此,只需首先选择列并应用裸join
:如果你想创造一个真实的世界:
设置