在pandas中添加行作为列

时间:2017-08-15 21:05:33

标签: pandas

我正在尝试通过将所有行放入pandas中的列来更改数据集。

  1. 5 6 7
  2. 8 9 10
  3. 需要更改为

    1. 5 6 7 8 9 10
    2. 当然有不同的标题,任何建议??

4 个答案:

答案 0 :(得分:1)

使用pd.DataFrame([df.values.flatten()]),如下所示:

In [18]: df
Out[18]:
   0  1   2
0  5  6   7
1  8  9  10

In [19]: pd.DataFrame([df.values.flatten()])
Out[19]:
   0  1  2  3  4   5
0  5  6  7  8  9  10

<强>解释

df.values返回numpy.ndarray

In [18]: df.values
Out[18]:
array([[ 5,  6,  7],
       [ 8,  9, 10]], dtype=int64)

In [19]: type(df.values)
Out[19]: numpy.ndarray

和numpy数组有.flatten()方法:

In [20]: df.values.flatten?
Docstring:
a.flatten(order='C')

Return a copy of the array collapsed into one dimension.

In [21]: df.values.flatten()
Out[21]: array([ 5,  6,  7,  8,  9, 10], dtype=int64)

Pandas.DataFrame构造函数需要行的列表/数组:

如果我们试试这个:

In [22]: pd.DataFrame([ 5,  6,  7,  8,  9, 10])
Out[22]:
    0
0   5
1   6
2   7
3   8
4   9
5  10

Pandas认为它是一个行列表,每行有一个元素。

所以我把那个数组括在方括号中:

In [23]: pd.DataFrame([[ 5,  6,  7,  8,  9, 10]])
Out[23]:
   0  1  2  3  4   5
0  5  6  7  8  9  10

将被理解为一行有6列。

答案 1 :(得分:1)

或只是一行:

df = pd.DataFrame([[1,2,3],[4,5,6]])
df.values.flatten()
#out: array([1, 2, 3, 4, 5, 6])

答案 2 :(得分:0)

使用numpy中的reshape函数:

import pandas as pd
import numpy as np

df = pd.DataFrame([[5, 6, 7],[8, 9, 10]])
nparray = np.array(df.iloc[:,:])
x = np.reshape(nparray, -1)
df = pd.DataFrame(x) #to convert back to a dataframe

答案 3 :(得分:0)

你也可以使用reduce()

from import pandas as pd
from functools import reduce

df = pd.DataFrame([[5, 6, 7],[8, 9, 10]])

df = pd.DataFrame([reduce(lambda x,y: list(x[1]) + list(y[1]), df.iterrows())])

df

   0  1  2  3   4   5
0  5  6  7  8   9  10