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下载日内数据,然后保存到csvfile。但是,日期是dtype = int64,我无法将其转换为时间戳。我不知道为什么我不能这样做。
答案 0 :(得分:1)
1 - csv
格式不正确,无法导入pandas
2 - 我们需要使用timestamp
和to_datetime
作为参数将unit="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")
答案 1 :(得分: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')