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