鱼C论坛

 找回密码
 立即注册
查看: 2090|回复: 2

[已解决]大力求帮助, code/year/quarter 3个变量如何使用循环模式编写??

[复制链接]
发表于 2023-8-27 08:07:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
下面这段代码是从数据库上下载公司的财务数据,但是只是对于某个年份,某个季度,见bs.query_operation_data(code="sh.600000", year=2017, quarter=2),请问应该如何写才能够给与一定的时间段比如说从2010-2020年中的每个季度都下载???     code/year/quarter 3个变量如何使用循环模式编写??



import baostock as bs
import pandas as pd

# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:'+lg.error_code)
print('login respond  error_msg:'+lg.error_msg)

# 营运能力
operation_list = []
rs_operation = bs.query_operation_data(code="sh.600000", year=2017, quarter=2)
while (rs_operation.error_code == '0') & rs_operation.next():
    operation_list.append(rs_operation.get_row_data())
result_operation = pd.DataFrame(operation_list, columns=rs_operation.fields)
# 打印输出
print(result_operation)
# 结果集输出到csv文件
result_operation.to_csv("D:\\operation_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()
最佳答案
2023-8-27 08:08:19
你可以使用两个嵌套的循环来实现对不同时间段的下载。首先,你需要定义一个包含所需时间范围的列表,然后使用两个循环来迭代这个列表。在内层循环中,你可以调用 bs.query_operation_data() 函数来下载数据,并将其保存到相应的文件中。

以下是修改后的代码示例:
import baostock as bs
import pandas as pd

# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)

# 定义年份和季度范围
start_year = 2010
end_year = 2020
quarters = [1, 2, 3, 4]

# 营运能力
operation_list = []

for year in range(start_year, end_year + 1):
    for quarter in quarters:
        rs_operation = bs.query_operation_data(code="sh.600000", year=year, quarter=quarter)
        while (rs_operation.error_code == '0') & rs_operation.next():
            operation_list.append(rs_operation.get_row_data())
            
# 创建DataFrame并保存到csv文件
result_operation = pd.DataFrame(operation_list, columns=rs_operation.fields)
result_operation.to_csv("D:\\operation_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()

这段代码会在指定的时间范围内迭代每个季度,并将数据保存到 D:\\operation_data.csv 文件中。请确保你已经安装了 baostock 和 pandas 库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-27 08:08:19 | 显示全部楼层    本楼为最佳答案   
你可以使用两个嵌套的循环来实现对不同时间段的下载。首先,你需要定义一个包含所需时间范围的列表,然后使用两个循环来迭代这个列表。在内层循环中,你可以调用 bs.query_operation_data() 函数来下载数据,并将其保存到相应的文件中。

以下是修改后的代码示例:
import baostock as bs
import pandas as pd

# 登陆系统
lg = bs.login()
# 显示登陆返回信息
print('login respond error_code:' + lg.error_code)
print('login respond error_msg:' + lg.error_msg)

# 定义年份和季度范围
start_year = 2010
end_year = 2020
quarters = [1, 2, 3, 4]

# 营运能力
operation_list = []

for year in range(start_year, end_year + 1):
    for quarter in quarters:
        rs_operation = bs.query_operation_data(code="sh.600000", year=year, quarter=quarter)
        while (rs_operation.error_code == '0') & rs_operation.next():
            operation_list.append(rs_operation.get_row_data())
            
# 创建DataFrame并保存到csv文件
result_operation = pd.DataFrame(operation_list, columns=rs_operation.fields)
result_operation.to_csv("D:\\operation_data.csv", encoding="gbk", index=False)

# 登出系统
bs.logout()

这段代码会在指定的时间范围内迭代每个季度,并将数据保存到 D:\\operation_data.csv 文件中。请确保你已经安装了 baostock 和 pandas 库。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-8-27 11:01:20 | 显示全部楼层
亲,请问,如果我要下载特定的公司数据,或者全A股上市公司数据,code 这个变量又该如何编写??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-24 20:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表