如何从数据框中选择所有数据?

时间:2015-11-17 01:48:54

标签: python select dataframe ipython-notebook series

我想选择数据框内的所有数据(索引,列索引和最右边的列除外 - 请参见下图)并将其存储到系列中。这可能是显而易见的,但我无法得到任何工作。我已经尝试过例如a = nai_data.ix[0:19],但它再次返回一个包含所有索引的新数据框,我只需要一系列数据。所以我尝试了a = pd.Series(nai_data.ix[0:19]),但也没有帮助。我确信必须有一个简单的方法来做到这一点,但无法找到答案。任何帮助都赞赏enter image description here

1 个答案:

答案 0 :(得分:1)

也许您正在寻找stack(),可以将其视为将列索引移动到行索引中:

In [12]: np.random.seed(2015)

In [13]: df = pd.DataFrame(np.random.randint(10, size=(3,4)))

In [14]: df
Out[14]: 
   0  1  2  3
0  2  2  9  6
1  8  5  7  8
2  0  6  7  8

In [15]: df.stack()
Out[15]: 
0  0    2
   1    2
   2    9
   3    6
1  0    8
   1    5
   2    7
   3    8
2  0    0
   1    6
   2    7
   3    8
dtype: int64

如果您不想要MultiIndex,请致电reset_index()

In [16]: df.stack().reset_index(drop=True)
Out[16]: 
0     2
1     2
2     9
3     6
4     8
5     5
6     7
7     8
8     0
9     6
10    7
11    8
dtype: int64

要选择除最后一列之外的所有列,您可以使用df.iloc

In [17]: df.iloc[:, :-1]
Out[17]: 
   0  1  2
0  2  2  9
1  8  5  7
2  0  6  7

In [18]: df.iloc[:, :-1].stack()
Out[18]: 
0  0    2
   1    2
   2    9
1  0    8
   1    5
   2    7
2  0    0
   1    6
   2    7
dtype: int64

另一种方法是切割和展平底层的NumPy数组:

In [21]: df.values
Out[21]: 
array([[2, 2, 9, 6],
       [8, 5, 7, 8],
       [0, 6, 7, 8]])

In [22]: df.values[:, :-1]
Out[22]: 
array([[2, 2, 9],
       [8, 5, 7],
       [0, 6, 7]])

In [23]: df.values[:, :-1].ravel()
Out[23]: array([2, 2, 9, 8, 5, 7, 0, 6, 7])

然后使用这些数据构建系列:

In [24]: pd.Series(df.values[:, :-1].ravel())
Out[24]: 
0    2
1    2
2    9
3    8
4    5
5    7
6    0
7    6
8    7
dtype: int64