从雅虎财经以规范的方式获取股票数据

数据挖掘 Python 熊猫 CSV 数据格式
2022-02-10 11:06:52

我使用以下代码从雅虎财经下载股票数据:-

import yfinance as yf
import datetime

    stocks = ["AXISBANK.NS", "HDFCBANK.NS", "ICICIBANK.NS" ,"INDUSINDBK.NS",
    "KOTAKBANK.NS",
    "SBIN.NS",
    "YESBANK.NS"]
    start = datetime.datetime(2018,1,1)
    end = datetime.datetime(2019,7,17)
    data = yf.download(stocks, start=start, end=end)
    data

我通过以下方式获取数据:-

在此处输入图像描述

我使用熊猫保存了数据:-

import pandas as pd

df = pd.DataFrame(data) 

# saving the dataframe 
df.to_csv('BANKING STOCK.csv')

我得到了这种格式的数据:- 在此处输入图像描述

但是我以这种格式处理我的数据:-

在此处输入图像描述

因为这种格式更便于通过 SQL 分析数据。如何更改数据的格式?

1个回答

采用:

data.stack().reset_index().rename(index=str, columns={"level_1": "Symbol"}).sort_values(['Symbol','Date'])

输出:

           Date       Symbol  Adj Close  ...     Low    Open     Volume
0    2018-01-01  AXISBANK.NS     564.80  ...  560.50  563.80    6943234
7    2018-01-02  AXISBANK.NS     558.81  ...  556.35  567.00    6292268
14   2018-01-03  AXISBANK.NS     559.75  ...  555.75  561.30    3990149
21   2018-01-04  AXISBANK.NS     559.21  ...  558.00  564.85    2766664
28   2018-01-05  AXISBANK.NS     562.55  ...  556.70  561.05    3249056
35   2018-01-08  AXISBANK.NS     564.75  ...  562.45  565.80    3770339
42   2018-01-09  AXISBANK.NS     564.60  ...  563.00  564.00    4607504
49   2018-01-10  AXISBANK.NS     562.10  ...  560.45  566.15    2411625

基本操作是将列标题堆叠成多索引的堆栈。然后将此多索引转换为列 ( reset_index()),然后获得正确的名称。最后,数据根据需要按符号和日期排序。


备注:你不需要df = pd.DataFrame(data)yf.download已经返回一个DataFrame.