从pandas DataFrame中采样一行后,如何获取一个单元格的值?

时间:2019-03-30 14:12:38

标签: python pandas dataframe

我有一个pandas DataFrame,并且已经从中成功采样了一行,但是问题之一是它只是返回了另一个DataFrame。我需要读取返回的行并获取该行特定元素的值。

我的DataFrame如下:

            Date        Open        High         Low       Close   Adj Close     Volume
0     1993-01-29   43.968700   43.968700   43.750000   43.937500   26.836645    1003200
1     1993-02-01   43.968700   44.250000   43.968700   44.250000   27.027504     480500
2     1993-02-02   44.218700   44.375000   44.125000   44.343700   27.084740     201300
3     1993-02-03   44.406200   44.843700   44.375000   44.812500   27.371080     529400
4     1993-02-04   44.968700   45.093700   44.468700   45.000000   27.485609     531500

我可以使用以下行进行采样:

start_state = self.market_data.iloc[:-self._num_trading_days_in_episode].sample(1)

最终看起来像这样:

            Date        Open        High         Low       Close   Adj Close     Volume
5299  2014-02-13  180.839996  183.199997  180.830002  183.009995  165.017517  100542200

现在,我需要弄清楚如何从该行读取Open的值。

3 个答案:

答案 0 :(得分:3)

使用:

start_state = self.market_data.iloc[:-self._num_trading_days_in_episode].sample(1)

首先可以通过标签DataFrame.loc进行选择,并获得索引的第一个值:

open = start_state.loc[start_state.index[0], 'Open']
#faster alternative
#open = start_state.at[start_state.index[0], 'Open']

或按DataFrame.ilocIndex.get_loc的位置:

pos = market_data.columns.get_loc('Open')
open = start_state.iloc[0, pos]
#faster alternative
#open = start_state.iat[0, pos]

或通过索引在numpy数组中选择第一个值

open = start_state['Open'].values[0]
#pandas 0.24+
#open = start_state['Open'].to_numpy()[0]

或使用Series.item将一项Series转换为标量:

open = start_state['Open'].item()

答案 1 :(得分:1)

这简直可以归结为

self.market_data.Open.iloc[:-self._num_trading_days_in_episode].sample(1).iloc[0]

答案 2 :(得分:1)

一旦采样,您就可以调用所需的列。使用loc(标签)或iloc(索引)

start_state = self.market_data.iloc[:-self._num_trading_days_in_episode].sample(1)

start_state.loc[:]['Open']