从Pandas DataReader数据帧中提取特定值?

时间:2017-08-03 19:15:59

标签: python pandas 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)

问题出在最后一行。如何提取指定“关闭”值的日期的具体值?

             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为例,但日期是动态变化的。

有什么建议吗?

2 个答案:

答案 0 :(得分: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 :(得分: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