Google Finance Pandas читать таблицу в кадре данных pandas

Как преобразовать эту html-таблицу в фрейм данных pandas?

https://www.google.com/finance/getprices?q=HINDALCO&i=60&p=15d&f=d,o,h,l,c,v

Пример данных:

введите здесь описание изображения


person Lakhan Pahuja    schedule 11.04.2017    source источник
comment
Кстати, панды поставляются со средством чтения данных для финансов Google< /а>. Может быть, это делает работу?   -  person greole    schedule 11.04.2017


Ответы (3)


Вы можете использовать read_csv с параметрами skiprows и names для новые имена столбцов:

url = 'https://www.google.com/finance/getprices?q=HINDALCO&i=60&p=15d&f=d,o,h,l,c,v'
df = pd.read_csv(url, skiprows=[0,1,2,3,5,6]).rename(columns={'COLUMNS=DATE':'DATE'})

print (df.head())
          DATE   CLOSE    HIGH     LOW    OPEN  VOLUME
0  a1490154300  194.80  194.80  194.80  194.80    2600
1            1  193.55  194.70  193.00  194.15  339142
2            2  193.80  193.95  193.55  193.60  242687
3            3  194.20  194.40  193.80  193.90  119874
4            4  193.80  194.20  193.80  194.20  121355
person jezrael    schedule 11.04.2017
comment
есть ли у вас какие-либо идеи о дате и времени, как я могу преобразовать эту дату [1] означает 1 минуту, дата 2 означает 2 минуты и т. д. - person Lakhan Pahuja; 11.04.2017
comment
Хорошо, но a1490154300 что именно означает? Это дата или время? - person jezrael; 11.04.2017
comment
я могу сделать массив времени? date 'a1490154300' означает 9:15 date'1' означает 9:16 и т.д. - person Lakhan Pahuja; 11.04.2017
comment
К сожалению, сейчас я не в сети, только по телефону, поэтому быстрее всего создайте новый вопрос. Не забудьте добавить образцы данных, желаемый результат и то, что вы пытаетесь сделать. Кстати, в a1490154300 не закодирована и дата вроде 2017-04-11? a149015 означает 9:15? Лучший ecplain это тоже. Спасибо. - person jezrael; 11.04.2017

Если вы не хотите получать свои данные только от Google, это будет работать с Yahoo:

import pandas as pd
import pandas_datareader.data as web
from datetime import datetime

start = datetime(2014, 6, 2)
end = datetime(2014, 9, 5)

hindalco = web.DataReader('HINDALCO.NS', 'yahoo', start, end)

In [15]: hindalco.head(5)
Out[15]: 
             Open    High     Low   Close    Volume  Adj Close
Date                                                          
2014-06-02  147.3  151.15  146.35  150.05  13844600   146.2012
2014-06-03  150.7  155.70  149.35  155.20  23276100   151.2191
2014-06-04  156.0  161.75  155.20  160.70  15948200   156.5780
2014-06-05  160.6  171.00  159.95  169.85  20296900   165.4934
2014-06-06  172.0  172.10  165.30  169.25  13769100   164.9087

Вам нужно будет установить pandas-datareader.

sudo -H pip install pandas-datareader (ubuntu)
pip install pandas-datareader (windows)
person dmdip    schedule 11.04.2017
comment
Я пытался использовать «HINDALCO» в качестве кода компании и Google вместо Yahoo, но это не сработало. Однако американские акции, такие как Apple, работали с Google: apple = web.DataReader('AAPL', 'google', start, end) - person dmdip; 11.04.2017
comment
я хочу данные за 1 минуту не ежедневно - person Lakhan Pahuja; 11.04.2017

@jezrael] ответил на ваш вопрос о минутных данных для Hindalco. Вот более или менее тот же ответ, немного измененный:

import pandas as pd
period = 60 #one minute
days = 2 # 2 days of data
ticker = 'HINDALCO'
url = 'http://www.google.com/finance/getprices?i={}&p={}d&f=d,o,h,l,c,v&df=cpct&q={}'.format(period, days, ticker)
cols = ['minute', 'open', 'high', 'low', 'close', 'volume']
df = pd.read_csv(url, skiprows=8, header=None, names=cols)
df.head()

Выход:

  minute    open    high     low   close  volume
0      1  194.35  194.35  193.80  193.85   25785
1      2  194.15  194.40  194.00  194.35   64580
2      3  193.95  194.25  193.85  194.15   42980
3      4  193.80  193.95  193.75  193.90   33936
4      5  193.90  193.90  193.60  193.80   57088
person dmdip    schedule 11.04.2017
comment
Да, ты можешь. Вы должны использовать значение поля, которое отображается как a1490154300. По сути, 1490154300 — это время начала данных, измеренное как количество секунд с 1 января 1970 года, 5:30 утра IST. (На самом деле 00:00 UTC). К этому значению поля добавьте количество минут, которое указано в этом столбце. - person dmdip; 11.04.2017
comment
Исправление кода, приведенного ранее. df = pd.read_csv (url, skiprows = 7, заголовок = нет, имена = столбцы) - person dmdip; 11.04.2017