请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

有没有办法提高DataFrame条件查找和赋值的效率

老师您好
本节学习获取财务指标数据,因为我对股票代码不熟悉,想要在获取的数据中添加一行股票名称,于是编写了以下代码。最后运行貌似达到目的了,但是,运行时长也是让我大吃一惊,仅仅4000*4000数据的嵌套循环,耗时达到2分钟左右,请问除了使用更高效的编程语言外,有没有简单高效的办法达到我的目标。

import pandas as pd
from jqdatasdk import *
auth(“17780521093”,“821021Couldzb”)

“在存放2020年财务指标数据的文件中,添加一行,指明每一行财务数据对应的股票名称”

** 获取所有股票基本信息,包含股票代码和股票名称**
stocks= get_all_securities(‘stock’) #获取所有股票基本信息,存入DataFrame对象stocks

#读取存有20年财务指标数据的文件,存入finance2020
finance2020= pd.read_csv(’/Users/zhongbo/PycharmProjects/pythonProject1/ZhongBoQuant/Data/finance/finance2020.csv’)

#二层循环遍历stocks和finance2020的行,当finance2020的股票代码与stocks的行索引值相等时, 将stocks这一行的股票名称(display_name列)数据,存入与finance2020新增的列(display_name)
for i in finance2020.index:
for j in stocks.index:
if finance2020.loc[i,‘code’]== j:
finance2020.loc[i,‘display_name’]=stocks.loc[j,‘display_name’]

#将更新后的数据存入新文件finance2020_AddName
finance2020.to_csv(’/Users/zhongbo/PycharmProjects/pythonProject1/ZhongBoQuant/Data/finance/finance2020-AddName.csv’)

正在回答

1回答

我理解了,就是添加股票名称是吧?你直接在存的时候,加上名称就可以了,jq有个方法,是根究code查询displayname的

get_security_info('000001.XSHE').display_name

不需要for循环在另外一张表里查


1 回复 有任何疑惑可以回复我~
  • 提问者 慕粉17780521093 #1
    get_security_info()只能查询单个股票的名称,对于4000多只股票,有没有办法用这个函数快速获取呢。我试了半天,还是只能用循环,时间还是老长了。。。
    finance2020= pd.read_csv('/Users/zhongbo/PycharmProjects/pythonProject1/ZhongBoQuant/Data/finance/finance2020.csv')
    
    for i in finance2020.index:
        finance2020.loc[i,'display_name']=get_security_info(finance2020.loc[i,'code']).display_name
    print(finance2020['display_name'])
    回复 有任何疑惑可以回复我~ 2021-06-27 22:35:51
  • 提问者 慕粉17780521093 #2
    下一节的把df的字段设置成索引的方法,应该可行,明天试一下
    回复 有任何疑惑可以回复我~ 2021-06-27 23:34:16
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信