欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件高级功能研发区 → [讨论]关于array转list,转Dataframe的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4104人关注过本帖树形打印复制链接

主题:[讨论]关于array转list,转Dataframe的问题

帅哥哟,离线,有人找我吗?
ly0794012132
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:61 积分:0 威望:0 精华:0 注册:2013/8/15 8:36:56
[讨论]关于array转list,转Dataframe的问题  发帖心情 Post By:2020/7/22 22:08:02 [只看该作者]

请教大佬,之前的get_indicator取出来的数字遍历后,存入到变量中,用type显示为<class 'numpy.ndarray'>,后来用tolist()转化为list,然后我有3个len都为6的list。
然后新建一个dict,

all_data = {'code':code,
            'ov':kpzf, 
            'ovb':kpbl}

all_data_df = pd.DataFrame(all_data)

我想用同样长度(len)的list合成DF.
但是收到如下错误码。
> 编译错误 : ValueError
>     line : 7402
> 错误信息 : arrays must all be same length

然后我再合并DataFrame之前加了len判断,发现如下问题:
22:00:50 > <class 'numpy.ndarray'>
22:00:50 > <class 'list'>
22:00:50 > <class 'list'>
22:00:50 > <class 'list'>
22:00:50 > 0
22:00:50 > 0
22:00:50 > 6
22:00:50 > <class 'dict'>
也就是说,如果不去真正执行的时候才会运行,那么这个时候系统会判断len不一样,因为2个遍历list长度都是0,
如果我删除DataFrame这段代码,最后在信息窗口显示如下代码:

21:48:41 > <class 'list'>
21:48:41 > <class 'list'>
21:48:41 > <class 'list'>
21:48:41 > 6
21:48:41 > 6
21:48:41 > 6
21:48:41 > <class 'dict'>
这段代码没啥问题,现在卡住了,因为编译错误导致无法编译,但是代码执行起来没啥问题,请问大佬如何解决?


 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/22 23:01:09 [只看该作者]

all_data_df = pd.DataFrame(all_data)
你就在这句话前面输出all_data看下是什么数据,还有长度是多少


 回到顶部
帅哥哟,离线,有人找我吗?
ly0794012132
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:61 积分:0 威望:0 精华:0 注册:2013/8/15 8:36:56
  发帖心情 Post By:2020/7/23 9:06:47 [只看该作者]

all_data 是dict,


22:00:50 > <class 'numpy.ndarray'>
22:00:50 > <class 'list'>
22:00:50 > <class 'list'>
22:00:50 > <class 'list'>
22:00:50 > 0
22:00:50 > 0
22:00:50 > 6
22:00:50 > <class 'dict'>

用dict可以直接把行列赋值给DataFrame。所以就用dict直接赋值。照理说是没啥问题的。
我下面用pycharm单独写了个测试代码
# 测试
list1 = [1, 2, 3, 4]
list2 = [5, 6, 7, 8]
list3 = [9, 10,11,12]

dict1 = {'first': list1,
'second': list2,
'third': list3
}
print(type(list1))
print(type(list2))
print(type(list3))
print(type(dict1))
all_data_df = pd.DataFrame.from_dict(dict1)
print(all_data_df)

输出结果是
<class 'list'>
<class 'list'>
<class 'list'>
<class 'dict'>
   first  second  third
0      1       5      9
1      2       6     10
2      3       7     11
3      4       8     12

Process finished with exit code 0

这个没啥问题。(下面是金字塔的输出结果),在没有实际运行前,依然默认前两个list是空的,所以pandas没法把这3个list合并起来。
09:03:01 > <class 'numpy.ndarray'>
09:03:01 > <class 'list'>
09:03:01 > <class 'list'>
09:03:01 > <class 'list'>
09:03:01 > 0
09:03:01 > 0
09:03:01 > 6
09:03:01 > <class 'dict'>

> 编译错误 : ValueError
>     line : 7402
> 错误信息 : arrays must all be same length


 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/23 9:30:41 [只看该作者]

我意思你在金字塔里去输出这个数据看下是什么

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/23 9:32:31 [只看该作者]

除了类型,长度还有吧这个字典也给打印出来

在你转换成pandas之前


 回到顶部
帅哥哟,离线,有人找我吗?
ly0794012132
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:61 积分:0 威望:0 精华:0 注册:2013/8/15 8:36:56
  发帖心情 Post By:2020/7/23 9:49:05 [只看该作者]

09:47:08 > {'code': ['SH600000', 'SH601213', 'SZ002111', 'SZ002543', 'SZ300157', 'SZ300574'], 'ov': [], 'ovb': []}
09:47:08 > <class 'dict'>

dict打印出来是这个,前面code有股票列表,后面两个遍历get_indicator结果是空值。

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/23 9:49:56 [只看该作者]

那对呀说明你ov没有存好列表值都

你把代码贴下吧


 回到顶部
帅哥哟,离线,有人找我吗?
ly0794012132
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:61 积分:0 威望:0 精华:0 注册:2013/8/15 8:36:56
  发帖心情 Post By:2020/7/23 10:04:38 [只看该作者]

大佬,是这样的,如果我只是编译的话,通不过去的,如果我不合并成DataFrame,也就是通过编译,然后我回测运行的时候,这两个空的list就有值了,长度都是6。
这个是我把程序停止到合并DataFrame之前,因为能编译成功,所以,直接运行,那么遍历结果就在各自的list里面,这个结果是没啥毛病的。
21:48:41 > <class 'list'>
21:48:41 > <class 'list'>
21:48:41 > <class 'list'>
21:48:41 > 6
21:48:41 > 6
21:48:41 > 6
21:48:41 > <class 'dict'>
_1
源代码如下
arr_kpzf = np.append(arr_kpzf, get_indicator(stock_code,'my_test1','indicator_1','','1d',1))
    arr_kpbl = np.append(arr_kpbl, get_indicator(stock_code,'my_test2','indicator_2','','1d',1))
    code = np.append(code, stock_code)
    
print(type(arr_kpzf))
kpzf = arr_kpzf.tolist()                
kpbl = arr_kpbl.tolist()
code = code.tolist()              

print(type(kpzf))
print(type(kpbl))
print(type(code))
print(len(kpzf))
print(len(kpbl))
print(len(code))
all_data = {'code':code,
            'ov':kpzf, 
            'ovb':kpbl}
print(all_data)
print(type(all_data))
all_data_df = pd.DataFrame.from_dict(all_data)

 回到顶部
帅哥哟,离线,有人找我吗?
ly0794012132
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:61 积分:0 威望:0 精华:0 注册:2013/8/15 8:36:56
  发帖心情 Post By:2020/7/23 10:07:09 [只看该作者]

09:45:51 > [10.000007064254337, 9.950251175753518, -2.4489772880836704, 9.830102452864297, 0.0, -3.3372347621213514]
09:45:51 > [36.80165731087944, 419.09860642034806, 1.4014120744885517, 30.64964029670862, 13.93965808926841, 0.8121759640417437]
09:45:51 > ['SH600000', 'SH601000', 'SZ002000', 'SZ002000', 'SZ300000', 'SZ300000']


这个是我断在合并DataFrame之前的结果,所有list都是有内容的,加上DataFrame的时候,因为编译不过,而get_indicator函数在编译过程中是不会运行的,所以列表为空值。

 回到顶部
帅哥哟,离线,有人找我吗?
yukizzc
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:21598 积分:0 威望:0 精华:1 注册:2010/7/31 16:35:30
  发帖心情 Post By:2020/7/23 10:11:02 [只看该作者]

电话我 021-20339087

 


 回到顶部
总数 12 1 2 下一页