print("Stock analyzing")
楚天龙 低位9月30日,20.43, 11月3日 20.76 (20%) - 20.50可加仓
import baostock as bs
import pandas as pd
from manim import *
import os
# 定义一个 Manim 场景类
class DividendTableScene(Scene):
def construct(self):
# 使用 baostock 获取数据
df_dividend = self.get_dividend_data()
if df_dividend is not None and not df_dividend.empty:
display_fields = ["code", "dividOperateDate","dividCashStock"]
# 确保所有需要的列都存在,只保留存在的列
actual_fields = [f for f in display_fields if f in df_dividend.columns]
if not actual_fields:
no_data_text = Text("所需的分红数据字段不存在。").scale(0.7)
self.add(no_data_text)
self.wait(3)
return
# 使用 pandas 选择并转换为列表,这是最安全的方式
# 确保数据类型是字符串,因为 Manim Table 需要字符串
table_data = df_dividend[actual_fields].astype(str).values.tolist()
# 添加新的中文字段标题
headers_map = {
"code": "名称",
"dividOperateDate": "分红日期",
"dividCashStock":"方式"
}
# 根据实际存在的列生成中文标题
headers = [headers_map.get(f, f) for f in actual_fields]
table_data_with_header = [headers] + table_data
# 创建 Manim Table 对象
table = Table(
table_data_with_header,
include_outer_lines=True,
# 调整单元格对齐方式
# arrange_in_grid_config={"cell_alignment": CENTER},
# 调整字体大小以适应屏幕
element_to_mobject_config={"font_size": 20}
)
# 将表格添加到场景中并播放动画
self.play(FadeIn(table))
self.wait(3)
self.play(FadeOut(table))
else:
no_data_text = Text("未能获取到分红数据或数据为空。").scale(0.7)
self.add(no_data_text)
self.wait(3)
def get_dividend_data(self):
#### 登陆系统 ####
lg = bs.login()
if lg.error_code != '0':
print(f'login respond error_code:{lg.error_code}, error_msg:{lg.error_msg}')
return None
rs_list = []
code = "sh.600177"
# 查询2015年至2017年除权除息信息
for year in [ "2025"]:
rs_dividend = bs.query_dividend_data(code=code, year=year, yearType="report")
while (rs_dividend.error_code == '0') & rs_dividend.next():
rs_list.append(rs_dividend.get_row_data())
result_dividend = pd.DataFrame(rs_list, columns=rs_dividend.fields)
print(rs_dividend.fields)
result_dividend["code"] = "上海银行"
result_dividend.sort_values(by='dividOperateDate', ascending=False, inplace=True)
# 重置索引,使索引从0开始连续
result_dividend.reset_index(drop=True, inplace=True)
#### 登出系统 ####
bs.logout()
# 打印输出 (可选)
# print(result_dividend)
return result_dividend