Python 如何在numpy中正确地连接二维数据数组中的字符串元素?

Python 如何在numpy中正确地连接二维数据数组中的字符串元素?,python,string,numpy,Python,String,Numpy,在下面的代码中,我希望arr2返回与lst2相同的字符串列表,但它没有返回。为什么lst2和arr2不同?是否有任何NumPythonic方法使arr2返回与lst2相同的字符串列表 代码: 输出: lst: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']] arr: [['MI', '', 'P'], ['B', 'N', 'SUFS']

在下面的代码中,我希望
arr2
返回与
lst2
相同的字符串列表,但它没有返回。为什么
lst2
arr2
不同?是否有任何NumPythonic方法使
arr2
返回与
lst2
相同的字符串列表

代码:

输出:

lst: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
arr: [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
lst2: ['MIP', 'BNSUFS', 'KOSXJRXAJJHW', 'ARITPKI', 'VREYR']
arr2: ['MIP', 'BNS', 'KOS', 'ARI', 'VRE']

熊猫很容易做到:

pd.DataFrame(arr).sum(axis=1)
np.apply\u沿轴()的原因是它从第一行推断结果中字符串的长度。由于第一行以
MIP
结尾,因此所有行的容量都为3个字符,这不是您想要的


有一个关于
apply\u沿_轴()的NumPy bug报告。
提供了更多信息:

熊猫将很容易做到:

pd.DataFrame(arr).sum(axis=1)
np.apply\u沿轴()的原因是它从第一行推断结果中字符串的长度。由于第一行以
MIP
结尾,因此所有行的容量都为3个字符,这不是您想要的

有一个关于
沿\u轴应用的NumPy bug报告()
,其中包含更多信息:

谢谢。 我从中找到了答案

谢谢。 我从中找到了答案


我不知道第一行决定数组的数据类型。我会考虑熊猫,但熊猫对我来说很难。。。无论如何,谢谢
np.array(lst,object).sum(axis=1)
的工作原理与
pandas
sum
的工作原理相同
np.sum
应用于对象数据类型数组使用对象的“+”方法,在本例中为Python字符串。我不知道第一行决定数组的数据类型。我会考虑熊猫,但熊猫对我来说很难。。。无论如何,谢谢
np.array(lst,object).sum(axis=1)
的工作原理与
pandas
sum
的工作原理相同
np.sum
应用于对象数据类型数组时使用对象的“+”方法,在本例中为Python字符串。
apply_沿_轴
并不是对简单行迭代的改进。它不会更快。
沿_轴应用
并不是简单的行迭代的改进。它不是更快。
import numpy as np

lst = [['MI', '', 'P'], ['B', 'N', 'SUFS'], ['KOS', 'XJRXA', 'JJHW'], ['ARI', 'TPKI', ''], ['VR', 'EYR', '']]
arr = np.array(lst)

arr2 = np.apply_along_axis(lambda x: np.asarray("".join(x), dtype=object), 1, arr)
# https://github.com/numpy/numpy/issues/8352#issuecomment-488133970
lst2 = list(map(lambda x: "".join(x), lst))

print('lst:', lst)
print('arr:', arr.tolist())
print('lst2:', lst2)
print('arr2:', arr2.tolist())