最近想要做一个能过查看多个折现的图形,就想到利用echart来实现。通过echarts里面的dataset可以非常方便的实现数据集的图形显示。
但是如何能够给dataset一个合适的数据集成为了最近一直困惑自己的问题,国庆在家想了好久,终于有了一个思路来实现这个数据集的构成。
主要思路如下:
1.传入三个序列的list,按照下列结构[{'datetime':'yyyy-mm-dd','close':number},{'datetime':'yyyy-mm-dd','close':number}]
2.将上述list的datetime提取出来合并成一个大的list(data_time),从而构成一个序列
3.将上述(data_time)以及其他的data,转换为pandas.dataframe,并且设置'datetime'为索引
4.利用concat方法将这些list合并成一个二维表。
5.重新将索引改为列数据
6.将上面的结果转换为json返回。
废话不说,直接上代码。
import pandas as pd
def mergeDataframe(data1,data2,data3):
datas = []
data_time = []
for data in [data1,data2,data3]:
datas.append(data)
indexlist = len(datas)
for data in datas:
for singledata in data:
data_time.append(singledata['datetime'])
data_list = sorted(set(data_time))
df_time = pd.DataFrame(data_list,columns=['datetime'])
df_time.set_index('datetime',inplace=True)
df1 = pd.DataFrame(data1, columns=['datetime','close'])
df1.set_index('datetime',inplace=True)
df2 = pd.DataFrame(data2, columns=['datetime','close'])
df2.set_index('datetime',inplace=True)
df3 = pd.DataFrame(data3, columns=['datetime','close'])
df3.set_index('datetime',inplace=True)
df_all = pd.concat([df_time,df1,df2,df3],axis=1)
df_all.columns = ['column1','column2','column3']
df_resetindex = df_all.reset_index()
df_json = df_resetindex.to_json(orient='values')
return df_json
给出三个list测试下:
data11 = [{'datetime': '2019-08-20', 'close': 4.85}, {'datetime': '2019-09-20', 'close': 4.85}, {'datetime': '2019-10-20', 'close': 4.85}, ]
data21 = [{'datetime': '2019-01-20', 'close': 4.31}, {'datetime': '2019-08-20', 'close': 4.31}, {'datetime': '2019-03-20', 'close': 4.31}, ]
data31 = [{'datetime': '2019-01-20', 'close': 6.0}, {'datetime': '2019-01-31', 'close': 5.5}, {'datetime': '2019-10-20', 'close': 5.0}, ]
运行结果如下:
可以看到已经合并了,然后按照数据集的模式打印出来。
最后有一个继续的困惑,如何将三个变成可变的?有解决方案的请留言帮助,感谢了。