2017-08-03 69 views
2

這裏是我運行代碼:從Pandas DataReader數據框中提取特定值?

def competitor_stock_data_report(): 
    import datetime 
    import pandas_datareader.data as web 

    date_time = datetime.datetime.now() 
    date = date_time.date() 

    stocklist = ['LAZ','AMG','BEN','LM','EVR','GHL','HLI','MC','PJT','MS','GS','JPM','AB'] 
    start = datetime.datetime(date.year-1, date.month, date.day-1) 
    end = datetime.datetime(date.year, date.month, date.day-1) 

    for x in stocklist: 
     df = web.DataReader(x, 'google', start, end) 
     print(df) 
     print(df.loc[df['Date'] == start]['Close'].values) 

的問題是在最後一行。我如何抽取指定'Close'值的具體數值?

   Open High Low Close Volume 
Date           
2016-08-02 35.22 35.25 33.66 33.75 861111 
2016-08-03 33.57 34.72 33.42 34.25 921401 
2016-08-04 33.89 34.22 33.77 34.07 587016 
2016-08-05 34.55 34.94 34.31 34.35 463317 
2016-08-08 34.54 34.75 34.31 34.74 958230 
2016-08-09 34.68 35.12 34.64 34.87 732959 

我想獲得33.75例如,但日期是動態變化..

有什麼建議?

+0

試試這個:'df.loc [df.index [0],'Close']' – MaxU

+0

是的,這對於第一個值來說是完美的..最後一個值怎麼樣?好像我得到了昨天的價格然後試圖得到昨天 - 一年前的價格? @MaxU在這種情況下,我會更改索引值? – sgerbhctim

+0

@cᴏʟᴅsᴘᴇᴇᴅ給我一個錯誤 – sgerbhctim

回答

2

IMO在第一行中得到一個列的值最簡單的方法:

In [40]: df 
Out[40]: 
       Open High  Low Close Volume 
Date 
2016-08-03 767.18 773.21 766.82 773.18 1287421 
2016-08-04 772.22 774.07 768.80 771.61 1140254 
2016-08-05 773.78 783.04 772.34 782.22 1801205 
2016-08-08 782.00 782.63 778.09 781.76 1107857 
2016-08-09 781.10 788.94 780.57 784.26 1318894 
...   ...  ...  ...  ...  ... 
2017-07-27 951.78 951.78 920.00 934.09 3212996 
2017-07-28 929.40 943.83 927.50 941.53 1846351 
2017-07-31 941.89 943.59 926.04 930.50 1970095 
2017-08-01 932.38 937.45 929.26 930.83 1277734 
2017-08-02 928.61 932.60 916.68 930.39 1824448 

[252 rows x 5 columns] 

In [41]: df.iat[0, df.columns.get_loc('Close')] 
Out[41]: 773.17999999999995 

最後一行:

In [42]: df.iat[-1, df.columns.get_loc('Close')] 
Out[42]: 930.38999999999999 
3

推薦

  • df.at[df.index[-1], 'Close']
  • df.iat[-1, df.columns.get_loc('Close')]
  • df.loc[df.index[-1], 'Close']
  • df.iloc[-1, df.columns.get_loc('Close')]

不要將其作爲公共的API,但工程

  • df.get_value(df.index[-1], 'Close')
  • df.get_value(-1, df.columns.get_loc('Close'), takeable=True)

不推薦,鏈接索引
有可能會更多,但我真的需要將它們添加

  • df.iloc[-1].at['Close']
  • df.loc[:, 'Close'].iat[-1]

都產生

34.869999999999997 
+1

哇!這是全面的! – MaxU