Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:将数组的多个列合并为一个列的更简单方法_Python_Pandas - Fatal编程技术网

Python:将数组的多个列合并为一个列的更简单方法

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.],

我有一个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.],
       [ 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
    
  • 列数减少到1
  • 每个元素由
    \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分隔。
    我不确定示例输出是否清晰。更新了为什么我需要问题中如此奇怪的形式。