2017-04-22 121 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) 

在這段代碼中,我可以下載雅虎財務的盤中數據,然後保存到csv文件中。但是,日期是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 - 我們需要的timestamp轉換使用to_datetimeunit="s"作爲參數,以日期時間。

這裏有一個工作示例:

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") 
相關問題