python - 使用 python 和 pandas 读取雅虎数据时出错
问题描述
我正在使用 Python 和 Pandas。
我下面的代码正在读取亚马逊股票的信息:
import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pprint
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib import style
from scipy.signal import argrelextrema
from pandas_datareader import data as pdr
import fix_yahoo_finance as yf
import pandas as pd
def sample_reading_from_yahoo():
# setting plotting, start / end date and time
style.use('ggplot')
# setting up the date and time
start = dt.datetime(2017, 1, 1)
end = dt.date.today()
# pull back the data
yf.pdr_override()
#data = pdr.get_data_yahoo("AMZN", start, end="2017-09-12")
data = pdr.get_data_yahoo("AMZN", start, end)
data = data.rename(columns={'Open': 'open'})
data = data.rename(columns={'High': 'high'})
data = data.rename(columns={'Low': 'low'})
data = data.rename(columns={'Close': 'close'})
data = data.rename(columns={'Adj Close': 'adjusted'})
data = data.rename(columns={'Volume': 'vol'})
data = data.drop_duplicates(keep=False)
data = data[['open', 'high', 'low', 'close', 'vol']]
return data
# MAIN
data = sample_reading_from_yahoo()
print(data)
输出如下所示:
open high low close vol
Date
2017-01-03 757.919983 758.760010 747.700012 753.669983 3521100
2017-01-04 758.390015 759.679993 754.200012 757.179993 2510500
2017-01-05 761.549988 782.400024 760.260010 780.450012 5830100
2017-01-06 782.359985 799.440002 778.479980 795.989990 5986200
2017-01-09 798.000000 801.770020 791.770020 796.919983 3440100
2017-01-10 796.599976 798.000000 789.539978 795.900024 2558400
每当我对 MAIN 区域进行如下更改时,
# MAIN
data = sample_reading_from_yahoo()
print(data)
data.Date = pd.to_datetime(data.Date, format='%d.%m.%Y %H:%M:%S.%f')
data.set_index(data.Date)
我收到以下错误
回溯(最后一次调用):文件“C:/Users/dgmufasa/PycharmProjects/Opportunities/Opportunities.py”,第 96 行,数据 = sample_reading_from_yahoo() 文件“C:/Users/dgmufasa/PycharmProjects/Opportunities/Opportunities. py",第 86 行,在 sample_reading_from_yahoo data.Date = pd.to_datetime(data.Date, format='%d.%m.%Y %H:%M:%S.%f') 文件“C:\WORK \Software\Python64bitv3.6\lib\site-packages\pandas\core\generic.py”,第 3614 行,在getattr 返回对象中。getattribute (self, name) AttributeError: 'DataFrame' 对象没有属性 'Date'
我怎样才能解决这个问题?
修改
@CK Chen - 感谢您的回复。
我做了以下更改:
def sample_reading_from_yahoo():
[... snip ...]
#print(data['vol'])
data = data.drop_duplicates(keep=False)
data = data[['open', 'high', 'low', 'close', 'vol']]
return data
# MAIN
data = sample_reading_from_yahoo()
#print(data.index)
data['datetime_index'] = pd.to_datetime(data.index, format='%m-%d-%Y %H:%M:%S')
data.set_index('datetime_index')
print('THIS THE DATA RESULT')
print(data)
并得到了结果:
THIS THE DATA RESULT
open high low close vol \
Date
2017-01-03 757.919983 758.760010 747.700012 753.669983 3521100
2017-01-04 758.390015 759.679993 754.200012 757.179993 2510500
2017-01-05 761.549988 782.400024 760.260010 780.450012 5830100
datetime_index
Date
2017-01-03 2017-01-03
2017-01-04 2017-01-04
2017-01-05 2017-01-05
时间格式似乎没有改变。我做错了什么?
TIA
解决方案
“日期”是数据框的 index.name。
你可以试试:
data['datetime_index'] = pd.to_datetime(data.index, format='%Y-%m-%d')
data.set_index('datetime_index')
推荐阅读
- c++ - c ++宏访问封闭类的名称
- javascript - 我无法检索状态。检查此代码和我的输出
- c# - 从表单中发布不同数量的图像
- python - 如何从 csv 文件中的文本数据中删除非英语
- gpgpu - 异常:设备内核映像无效
- python-3.x - 如何使用 python 中的 schedule 包安排在欧洲中部时间晚上 8 点运行的作业
- kubernetes - Kubernetes 用户有什么用?
- java - java中的方法 DateTime.now() 和 new DateTime(System.currentTimeMillis()) 是否相等?
- selenium - webdriver接口和chromedriver类之间的远程webdriver的目的是什么
- android - MS TTS 认知服务 URL 的 traiffiqtype 参数的用途是什么