Python:将数组的多个列合并为一个列的更简单方法
我有一个1996*9阵列:Python:将数组的多个列合并为一个列的更简单方法,python,pandas,Python,Pandas,我有一个1996*9阵列: array([[ 0., 1., 1., ..., 1., 1., 0.], [ 1., 1., 0., ..., 1., 0., 1.], [ 0., 1., 1., ..., 1., 1., 0.], ..., [ 0., 0., 0., ..., 0., 0., 1.], [ 0., 1., 1., ..., 1., 1., 0.],
array([[ 0., 1., 1., ..., 1., 1., 0.],
[ 1., 1., 0., ..., 1., 0., 1.],
[ 0., 1., 1., ..., 1., 1., 0.],
...,
[ 0., 0., 0., ..., 0., 0., 1.],
[ 0., 1., 1., ..., 1., 1., 0.],
[ 0., 1., 1., ..., 1., 1., 0.]])
我想要一个1996*1的数组
我所做的:
pd.DataFrame(train_L.astype(int)).apply(lambda x: ''.join(str(x)), axis = 1)
我明白了
0 0 0\n1 1\n2 1\n3 1\n4 1\n5 1...
1 0 1\n1 1\n2 0\n3 0\n4 0\n5 0...
2 0 0\n1 1\n2 1\n3 0\n4 1\n5 1...
3 0 0\n1 1\n2 1\n3 0\n4 1\n5 1...
4 0 1\n1 0\n2 0\n3 0\n4 0\n5 0...
问题是:
\n1
示例输出 我所拥有的:
v1 v2 v3 ... v9
1 0 0 ... 1
我想:
v1
1\t0\t0\t...\t1
\t
分隔为什么我需要这么奇怪的表格:
对于图像处理,我们有一列用于图像标签。但是,一个图像可能有多个标签。我必须将多个标签压缩到一列中。这是库的要求。将数据类型转换为str后,您可以
应用
lambda:
In [14]:
df = pd.DataFrame(np.random.randn(4,5))
df
Out[14]:
0 1 2 3 4
0 1.036485 -1.243777 1.286254 1.973786 -0.083245
1 1.698828 1.696846 0.037732 -0.630546 -0.135069
2 -1.231337 -1.166480 0.046414 -0.965710 1.341809
3 0.591176 0.275267 -0.446553 -0.230353 0.258817
In [16]:
df.astype(str).apply(lambda x: ''.join(x), axis=1)
Out[16]:
0 1.03648484941-1.243776761241.286253591521.9737...
1 1.698827772721.696846119330.0377324485782-0.63...
2 -1.23133722226-1.166480155330.046414100678-0.9...
3 0.5911755605680.275266550205-0.446552705185-0....
dtype: object
似乎您需要一个选项卡,您可以使用选项卡加入:
In [17]:
df.astype(str).apply(lambda x: '\t'.join(x), axis=1)
Out[17]:
0 1.03648484941\t-1.24377676124\t1.28625359152\t...
1 1.69882777272\t1.69684611933\t0.0377324485782\...
2 -1.23133722226\t-1.16648015533\t0.046414100678...
3 0.591175560568\t0.275266550205\t-0.44655270518...
dtype: object
这将产生一个字符串,这可能不是您想要的。也许您应该解释一下为什么希望数据采用所需的格式
a = np.array([[ 0., 1., 1., 1., 1., 0.],
[ 1., 1., 0., 1., 0., 1.],
[ 0., 1., 1., 1., 1., 0.],
[ 0., 0., 0., 0., 0., 1.],
[ 0., 1., 1., 1., 1., 0.],
[ 0., 1., 1., 1., 1., 0.]])
v = pd.DataFrame(['\t'.join([str(val) for val in row]) for row in a], columns=['v1'])
for row in v.iterrows():
print(row[1].v1)
0.0 1.0 1.0 1.0 1.0 0.0
1.0 1.0 0.0 1.0 0.0 1.0
0.0 1.0 1.0 1.0 1.0 0.0
0.0 0.0 0.0 0.0 0.0 1.0
0.0 1.0 1.0 1.0 1.0 0.0
0.0 1.0 1.0 1.0 1.0 0.0
>>> v
v1
0 0.0\t1.0\t1.0\t1.0\t1.0\t0.0
1 1.0\t1.0\t0.0\t1.0\t0.0\t1.0
2 0.0\t1.0\t1.0\t1.0\t1.0\t0.0
3 0.0\t0.0\t0.0\t0.0\t0.0\t1.0
4 0.0\t1.0\t1.0\t1.0\t1.0\t0.0
5 0.0\t1.0\t1.0\t1.0\t1.0\t0.0
你说的1996 x 1阵列是什么意思?这里没有连接或重塑,你能解释一下想要的输出吗?我更新了我的问题。清楚了吗?@EdChum:他想把所有的列合并成一个'.join()
所以你想要df.astype(str).apply(lambda x:'.join,axis=1)
?你想要的现在已经清楚了,但是我觉得我应该提到这是一件非常不寻常的事情。谢谢!一个问题是缺少分隔(通过选项卡)。什么分隔,您声明要在没有空格的情况下加入?每个元素用\t分隔。
我不确定示例输出是否清晰。更新了为什么我需要问题中如此奇怪的形式。