问题描述
我一直在将 JSON 数据转换为 Pandas 表,但我仍然需要将日期时间字符串转换为浮点数,以便 mplfinance 解释器能够读取和绘制数据。但是在尝试执行代码时,解释器中的一个包存在问题。
有谁知道为什么mpl_finance的更新版本没有这个date2num包(据我所知)?此代码曾经适用于先前版本的 mpl_finance,但由于某种原因,我无法使用“date2num”包。
有什么替代方法可以使这项工作发挥作用?
import mplfinance as mpf
import datetime
from mplfinance import date2num
#Convert date string to date float
float_date = date2num(datetime.datetime.strptime(df['date'],'%Y%m%d%H%M%s%f'))
print(aapl_df)
mpf.plot(aapl_df)
这是我目前所拥有的:
import requests #for http request to Marketstack.com
import pandas as pd
params = {
'access_key': '*********************'
}
#Sorts the data into a table
api_result = requests.get('HTTP API LINK/REQUEST',params)
api_response = api_result.json()
df = pd.DataFrame(api_response['data'])
print(df)
aapl_df = df[['date','high','open','low','close','adj_close']]
print(aapl_df)
import mplfinance as mpf
import datetime
#Convert date string to date float
float_date = date2num(datetime.datetime.strptime(df['date'],'%Y-%m-%dT%H:%M:%s+%f'))
print(aapl_df)
mpf.plot(aapl_df)
解决方法
-
date2num()
不是也从来不是 mplfinance(也不是 mpl_finance)的一部分。 -
date2num
是 matplotlib 的一部分。 - 旧 mpl_finance 要求您将日期转换为日期的 matplotlib 数字表示。因此,在过去,您需要在日期上调用 date2num。
- 新 mplfinance 不需要这种转换。相反,它需要 Pandas DataFrame 和 Pandas DatetimeIndex 形式的数据。
- 如果您的数据是 JSON,我建议您调用
pandas.read_json()
来创建数据框。
我强烈建议您花 10 或 15 分钟仔细阅读新的 mplfinance 基本使用文档:
文档的第一部分调用了 pandas.read_csv()
,您可以将其替换为 pandas.read_json()
,并且很可能其他所有内容都可以正常工作。
如果您在此处发布您的数据以及所有代码(至少从读取数据到调用 mpf.plot()
),那么我可能可以帮助您使其工作。>
- 尝试以下更改,从您分配
aapl_df
的行开始:
###aapl_df = df[['date','high','open','low','close','adj_close']]
aapl_df = df[['high','close']]
#Convert date string to datetime index:
aapl_df.index = pd.DatetimeIndex(df['date'])
print(aapl_df)
import mplfinance as mpf
###import datetime
####Convert date string to date float
###float_date = date2num(datetime.datetime.strptime(df['date'],'%Y-%m-%dT%H:%M:%S+%f'))
print(aapl_df)
mpf.plot(aapl_df)
我在一定程度上猜测这会奏效;如果我能看到 api_response = api_result.json()
的输出会更好。尽管如此,请尝试一下,让我知道它是如何工作的。
如果 aapl_df.index = pd.DatetimeIndex(df['date'])
引发异常,请尝试:
aapl_df.index = pd.DatetimeIndex(df['date'].values)
,
这是我目前所拥有的:
import requests #for http request to Marketstack.com
import pandas as pd
params = {
'access_key': '*********************'
}
#Sorts the data into a table
api_result = requests.get('HTTP API LINK/REQUEST',params)
api_response = api_result.json()
df = pd.DataFrame(api_response['data'])
print(df)
aapl_df = df[['date','adj_close']]
print(aapl_df)
import mplfinance as mpf
import datetime
#Convert date string to date float
float_date = date2num(datetime.datetime.strptime(df['date'],'%Y-%m-%dT%H:%M:%S+%f'))
print(aapl_df)
mpf.plot(aapl_df)
所以我可以打印数据,但错误的日期格式是造成错误的原因。