2017-04-22 28 views
1
import pandas as pd 
import urllib 
from pandas import DataFrame, Series 
import datetime 

url = 'https://chartapi.finance.yahoo.com/instrument/1.0/GOOG/chartdata;type=quote;range=10d/csv' 
urllib.request.urlretrieve(url, './data/goog.csv') 
GOOG= DataFrame(pd.read_csv("goog.csv")) 

GOOG['Timestamp']= datetime.datetime.fromtimestamp(GOOG['Timestamp']).strptime('%Y-%m-%d :%H:%M:%S) 

このコードでは、yahoo financeからintradayデータをダウンロードしてから、csvfileに保存することができました。ただし、日付はdtype = int64で、タイムスタンプに変換するのに問題があります。なぜ私はそうすることができないのか分かりません。あなたはタイムスタンプ場合int64をタイムスタンプに変換するには

+0

[パンダ:日時にタイムスタンプ]の可能な重複(http://stackoverflow.com/questions/40038169/pandas-timestamp-to-datetime)あなたがしている – m0nhawk

+0

...%Y-%m-%d:%H:%M:%S'' < - **ここに**。また、 'csv'ファイルの形式が正しくありません。 –

答えて

0

はUnixの時間であり、その後、単純に使用します。

秒Unixの時間の場合:

pd.to_datetime(timestamp, unit='s') 

またはナノ秒のUnix時間の場合:

pd.to_datetime(timestamp, unit='ns') 

結果:

GOOG['Timestamp'] = pd.to_datetime(GOOG['Timestamp'], unit='s') 
+0

ありがとう!本当にうまくいった –

1

1からcsvが正しくpandas
2にインポートするフォーマットされていません - 私たちは、引数としてto_datetimeunit="s"を使用して日時をtimestampを変換する必要があります。

ここで働い例です:

import requests 
import re 
import pandas as pd 
from io import BytesIO 

symbol = "GOOG" 
days = 10 

url = 'https://chartapi.finance.yahoo.com/instrument/1.0/{}/chartdata;type=quote;range={}d/csv'.format(symbol, days) 
csv = requests.get(url).text 
headers = re.findall(r"values:(.*?)\s+", csv, re.IGNORECASE)[0] 
csv = re.sub(r".*volume:.*?\s", "", csv, 0, re.IGNORECASE | re.DOTALL) 
csv = "{}\n{}".format(headers,csv) 
GOOG = pd.read_csv(BytesIO(csv), sep=",") 
GOOG['Timestamp'] = pd.to_datetime(GOOG['Timestamp'], unit="s") 
関連する問題