akshare 1.14.49__py3-none-any.whl → 1.17.99__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. akshare/__init__.py +595 -129
  2. akshare/air/air_hebei.py +77 -54
  3. akshare/air/air_zhenqi.py +0 -4
  4. akshare/air/cons.py +1 -0
  5. akshare/air/crypto.js +1 -1
  6. akshare/air/outcrypto.js +1 -1
  7. akshare/article/cons.py +1 -0
  8. akshare/article/epu_index.py +4 -3
  9. akshare/article/ff_factor.py +19 -8
  10. akshare/article/fred_md.py +4 -1
  11. akshare/article/risk_rv.py +3 -8
  12. akshare/bank/bank_cbirc_2020.py +11 -11
  13. akshare/bank/cons.py +7 -6
  14. akshare/bond/bond_buy_back_em.py +228 -0
  15. akshare/bond/bond_cb_sina.py +1 -0
  16. akshare/bond/bond_cb_ths.py +17 -9
  17. akshare/bond/bond_cbond.py +19 -14
  18. akshare/bond/bond_china.py +38 -39
  19. akshare/bond/bond_china_money.py +1 -1
  20. akshare/bond/bond_convert.py +10 -9
  21. akshare/bond/bond_em.py +37 -17
  22. akshare/bond/bond_summary.py +38 -37
  23. akshare/bond/bond_zh_cov.py +31 -40
  24. akshare/bond/bond_zh_sina.py +4 -0
  25. akshare/bond/cons.py +14 -11
  26. akshare/cal/__init__.py +0 -0
  27. akshare/cal/rv.py +170 -0
  28. akshare/cost/cost_living.py +7 -5
  29. akshare/crypto/__init__.py +1 -1
  30. akshare/crypto/crypto_bitcoin_cme.py +9 -7
  31. akshare/crypto/crypto_hold.py +4 -2
  32. akshare/currency/currency.py +1 -0
  33. akshare/currency/currency_china_bank_sina.py +11 -6
  34. akshare/data/__init__.py +1 -1
  35. akshare/data/cninfo.js +1 -1
  36. akshare/datasets.py +10 -21
  37. akshare/economic/cons.py +10 -3
  38. akshare/economic/macro_australia.py +74 -69
  39. akshare/economic/macro_bank.py +95 -653
  40. akshare/economic/macro_canada.py +92 -81
  41. akshare/economic/macro_china.py +97 -105
  42. akshare/economic/macro_china_hk.py +0 -1
  43. akshare/economic/macro_euro.py +103 -56
  44. akshare/economic/macro_finance_ths.py +7 -5
  45. akshare/economic/macro_germany.py +1 -1
  46. akshare/economic/macro_japan.py +0 -1
  47. akshare/economic/macro_other.py +1 -6
  48. akshare/economic/macro_swiss.py +2 -3
  49. akshare/economic/macro_uk.py +1 -1
  50. akshare/economic/macro_usa.py +7 -9
  51. akshare/economic/marco_cnbs.py +11 -6
  52. akshare/energy/energy_carbon.py +0 -1
  53. akshare/energy/energy_oil_em.py +1 -2
  54. akshare/event/cons.py +1 -0
  55. akshare/exceptions.py +43 -0
  56. akshare/file_fold/calendar.json +245 -2
  57. akshare/forex/__init__.py +0 -0
  58. akshare/forex/cons.py +192 -0
  59. akshare/forex/forex_em.py +149 -0
  60. akshare/fortune/fortune_500.py +1 -37
  61. akshare/fortune/fortune_bloomberg.py +6 -3
  62. akshare/fortune/fortune_forbes_500.py +3 -6
  63. akshare/fortune/fortune_hurun.py +2 -1
  64. akshare/fortune/fortune_xincaifu_500.py +17 -14
  65. akshare/fund/fund_announcement_em.py +145 -0
  66. akshare/fund/fund_aum_em.py +49 -35
  67. akshare/fund/fund_em.py +251 -220
  68. akshare/fund/fund_etf_em.py +44 -35
  69. akshare/fund/fund_etf_sina.py +75 -27
  70. akshare/fund/fund_etf_ths.py +2 -0
  71. akshare/fund/fund_fee_em.py +172 -0
  72. akshare/fund/fund_fhsp_em.py +42 -32
  73. akshare/fund/fund_init_em.py +8 -5
  74. akshare/fund/fund_lof_em.py +12 -19
  75. akshare/fund/fund_manager.py +25 -11
  76. akshare/fund/fund_overview_em.py +42 -0
  77. akshare/fund/fund_portfolio_em.py +23 -21
  78. akshare/fund/fund_position_lg.py +19 -8
  79. akshare/fund/fund_rank_em.py +2 -5
  80. akshare/fund/fund_rating.py +33 -12
  81. akshare/fund/fund_scale_em.py +24 -13
  82. akshare/fund/fund_scale_sina.py +20 -10
  83. akshare/fund/fund_xq.py +3 -2
  84. akshare/futures/cons.py +135 -39
  85. akshare/futures/cot.py +55 -56
  86. akshare/futures/futures_basis.py +49 -11
  87. akshare/futures/futures_comex_em.py +1 -0
  88. akshare/futures/futures_comm_ctp.py +1 -1
  89. akshare/futures/futures_contract_detail.py +59 -9
  90. akshare/futures/futures_daily_bar.py +66 -59
  91. akshare/futures/futures_foreign.py +14 -8
  92. akshare/futures/futures_hf_em.py +215 -61
  93. akshare/futures/futures_hist_em.py +191 -0
  94. akshare/futures/futures_hq_sina.py +5 -3
  95. akshare/futures/futures_index_ccidx.py +24 -82
  96. akshare/futures/futures_inventory_99.py +70 -272
  97. akshare/futures/futures_inventory_em.py +14 -11
  98. akshare/futures/futures_news_shmet.py +2 -2
  99. akshare/futures/futures_roll_yield.py +11 -24
  100. akshare/futures/futures_rule.py +7 -3
  101. akshare/futures/futures_rule_em.py +38 -0
  102. akshare/futures/futures_settlement_price_sgx.py +21 -6
  103. akshare/futures/futures_stock_js.py +0 -1
  104. akshare/futures/futures_to_spot.py +5 -6
  105. akshare/futures/futures_warehouse_receipt.py +48 -47
  106. akshare/futures/futures_zh_sina.py +3 -3
  107. akshare/futures/receipt.py +298 -165
  108. akshare/futures/requests_fun.py +16 -3
  109. akshare/futures/symbol_var.py +32 -13
  110. akshare/futures_derivative/cons.py +100 -103
  111. akshare/futures_derivative/futures_contract_info_cffex.py +55 -39
  112. akshare/futures_derivative/futures_contract_info_czce.py +2 -0
  113. akshare/futures_derivative/futures_contract_info_dce.py +43 -17
  114. akshare/futures_derivative/futures_contract_info_gfex.py +43 -31
  115. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  116. akshare/futures_derivative/futures_contract_info_shfe.py +3 -4
  117. akshare/futures_derivative/futures_cot_sina.py +8 -6
  118. akshare/futures_derivative/futures_index_sina.py +25 -13
  119. akshare/fx/cons.py +12 -7
  120. akshare/fx/fx_c_swap_cm.py +62 -0
  121. akshare/fx/fx_quote.py +3 -2
  122. akshare/fx/fx_quote_baidu.py +2 -1
  123. akshare/hf/__init__.py +1 -1
  124. akshare/hf/hf_sp500.py +8 -7
  125. akshare/index/cons.py +132 -28
  126. akshare/index/index_cni.py +7 -7
  127. akshare/index/index_cons.py +2 -2
  128. akshare/index/index_csindex.py +68 -0
  129. akshare/index/index_cx.py +20 -20
  130. akshare/index/index_drewry.py +17 -16
  131. akshare/index/index_eri.py +1 -0
  132. akshare/index/index_global_em.py +167 -0
  133. akshare/index/index_global_sina.py +82 -0
  134. akshare/index/index_kq_fz.py +17 -14
  135. akshare/index/index_kq_ss.py +1 -0
  136. akshare/index/index_option_qvix.py +351 -16
  137. akshare/index/index_research_sw.py +21 -21
  138. akshare/index/index_spot.py +9 -5
  139. akshare/index/index_stock_hk.py +5 -9
  140. akshare/index/index_stock_zh.py +111 -24
  141. akshare/index/index_stock_zh_csindex.py +3 -367
  142. akshare/index/index_sugar.py +18 -4
  143. akshare/index/index_sw.py +10 -2
  144. akshare/index/index_yw.py +53 -75
  145. akshare/index/index_zh_em.py +15 -82
  146. akshare/interest_rate/interbank_rate_em.py +0 -1
  147. akshare/movie/jm.js +0 -1
  148. akshare/news/__init__.py +1 -1
  149. akshare/news/news_baidu.py +395 -222
  150. akshare/news/news_stock.py +49 -16
  151. akshare/option/cons.py +2 -2
  152. akshare/option/option_commodity.py +341 -220
  153. akshare/option/option_commodity_sina.py +22 -26
  154. akshare/option/option_contract_info_ctp.py +63 -0
  155. akshare/option/option_current_sse.py +61 -0
  156. akshare/option/option_current_szse.py +84 -0
  157. akshare/option/option_czce.py +37 -9
  158. akshare/option/option_daily_stats_sse_szse.py +0 -1
  159. akshare/option/option_em.py +4 -8
  160. akshare/option/option_finance.py +60 -12
  161. akshare/option/option_finance_sina.py +7 -7
  162. akshare/option/option_lhb_em.py +0 -1
  163. akshare/option/option_margin.py +62 -0
  164. akshare/option/option_premium_analysis_em.py +58 -53
  165. akshare/option/option_risk_analysis_em.py +11 -8
  166. akshare/option/option_risk_indicator_sse.py +3 -4
  167. akshare/option/option_value_analysis_em.py +62 -55
  168. akshare/other/__init__.py +1 -1
  169. akshare/pro/__init__.py +0 -1
  170. akshare/pro/client.py +6 -4
  171. akshare/pro/cons.py +3 -2
  172. akshare/pro/data_pro.py +6 -5
  173. akshare/qdii/__init__.py +0 -0
  174. akshare/qdii/qdii_jsl.py +233 -0
  175. akshare/qhkc/__init__.py +1 -6
  176. akshare/qhkc/qhkc_api.py +64 -22
  177. akshare/qhkc_web/__init__.py +1 -6
  178. akshare/qhkc_web/qhkc_fund.py +10 -6
  179. akshare/qhkc_web/qhkc_index.py +28 -14
  180. akshare/qhkc_web/qhkc_tool.py +62 -59
  181. akshare/rate/__init__.py +1 -1
  182. akshare/rate/repo_rate.py +36 -32
  183. akshare/reits/__init__.py +1 -1
  184. akshare/reits/reits_basic.py +149 -13
  185. akshare/request.py +117 -0
  186. akshare/spot/__init__.py +1 -1
  187. akshare/spot/spot_hog_soozhu.py +165 -3
  188. akshare/spot/spot_sge.py +70 -9
  189. akshare/stock/cons.py +60 -23
  190. akshare/stock/stock_allotment_cninfo.py +8 -8
  191. akshare/stock/stock_ask_bid_em.py +3 -78
  192. akshare/stock/stock_board_concept_em.py +160 -35
  193. akshare/stock/stock_board_industry_em.py +163 -70
  194. akshare/stock/stock_dividend_cninfo.py +31 -17
  195. akshare/stock/stock_dzjy_em.py +347 -260
  196. akshare/stock/stock_fund_em.py +72 -64
  197. akshare/stock/stock_fund_hold.py +1 -2
  198. akshare/stock/stock_gsrl_em.py +1 -0
  199. akshare/stock/stock_hk_comparison_em.py +175 -0
  200. akshare/stock/stock_hk_famous.py +4 -5
  201. akshare/stock/stock_hk_fhpx_ths.py +2 -1
  202. akshare/stock/stock_hk_hot_rank_em.py +1 -0
  203. akshare/stock/stock_hk_sina.py +84 -36
  204. akshare/stock/stock_hold_control_cninfo.py +82 -0
  205. akshare/stock/stock_hold_control_em.py +0 -2
  206. akshare/stock/stock_hot_rank_em.py +4 -1
  207. akshare/stock/stock_hot_search_baidu.py +32 -19
  208. akshare/stock/stock_hot_up_em.py +4 -1
  209. akshare/stock/stock_hsgt_em.py +155 -0
  210. akshare/stock/stock_industry.py +1 -0
  211. akshare/stock/stock_industry_cninfo.py +1 -2
  212. akshare/stock/stock_info.py +6 -4
  213. akshare/stock/stock_info_em.py +17 -11
  214. akshare/stock/stock_intraday_em.py +4 -78
  215. akshare/stock/stock_intraday_sina.py +2 -2
  216. akshare/stock/stock_news_cx.py +39 -0
  217. akshare/stock/stock_profile_cninfo.py +7 -7
  218. akshare/stock/stock_profile_em.py +302 -0
  219. akshare/stock/stock_rank_forecast.py +6 -5
  220. akshare/stock/stock_repurchase_em.py +7 -2
  221. akshare/stock/stock_share_changes_cninfo.py +7 -5
  222. akshare/stock/stock_share_hold.py +24 -20
  223. akshare/stock/stock_stop.py +6 -6
  224. akshare/stock/stock_summary.py +153 -417
  225. akshare/stock/stock_us_famous.py +5 -6
  226. akshare/stock/stock_us_js.py +3 -2
  227. akshare/stock/stock_us_pink.py +38 -27
  228. akshare/stock/stock_us_sina.py +7 -3
  229. akshare/stock/stock_weibo_nlp.py +18 -20
  230. akshare/stock/stock_xq.py +24 -22
  231. akshare/stock/stock_zh_a_sina.py +8 -5
  232. akshare/stock/stock_zh_a_special.py +240 -243
  233. akshare/stock/stock_zh_a_tick_tx.py +11 -3
  234. akshare/stock/stock_zh_ah_tx.py +23 -26
  235. akshare/stock/stock_zh_b_sina.py +2 -2
  236. akshare/stock/stock_zh_comparison_em.py +250 -0
  237. akshare/stock/stock_zh_kcb_sina.py +67 -64
  238. akshare/stock_a/__init__.py +0 -0
  239. akshare/stock_a/stock_board_concept_name_em.py +170 -0
  240. akshare/stock_a/stock_individual_fund_flow_rank.py +258 -0
  241. akshare/stock_a/stock_zh_a_spot.py +212 -0
  242. akshare/stock_feature/cons.py +1 -0
  243. akshare/stock_feature/stock_a_indicator.py +9 -54
  244. akshare/stock_feature/stock_a_pe_and_pb.py +23 -5
  245. akshare/stock_feature/stock_account_em.py +0 -1
  246. akshare/stock_feature/stock_all_pb.py +2 -1
  247. akshare/stock_feature/stock_analyst_em.py +36 -30
  248. akshare/stock_feature/stock_board_concept_ths.py +328 -0
  249. akshare/stock_feature/stock_board_industry_ths.py +57 -2
  250. akshare/stock_feature/stock_buffett_index_lg.py +10 -8
  251. akshare/stock_feature/stock_classify_sina.py +3 -6
  252. akshare/stock_feature/stock_comment_em.py +81 -144
  253. akshare/stock_feature/stock_congestion_lg.py +2 -1
  254. akshare/stock_feature/stock_cyq_em.py +5 -11
  255. akshare/stock_feature/stock_disclosure_cninfo.py +6 -6
  256. akshare/stock_feature/stock_dxsyl_em.py +121 -74
  257. akshare/stock_feature/stock_ebs_lg.py +5 -4
  258. akshare/stock_feature/stock_esg_sina.py +29 -7
  259. akshare/stock_feature/stock_fhps_em.py +2 -1
  260. akshare/stock_feature/stock_fhps_ths.py +15 -7
  261. akshare/stock_feature/stock_fund_flow.py +30 -22
  262. akshare/stock_feature/stock_gddh_em.py +19 -11
  263. akshare/stock_feature/stock_gdfx_em.py +226 -113
  264. akshare/stock_feature/stock_gdhs.py +75 -50
  265. akshare/stock_feature/stock_gdzjc_em.py +21 -10
  266. akshare/stock_feature/stock_gpzy_em.py +78 -46
  267. akshare/stock_feature/stock_gxl_lg.py +3 -2
  268. akshare/stock_feature/stock_hist_em.py +137 -234
  269. akshare/stock_feature/stock_hist_tx.py +13 -10
  270. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  271. akshare/stock_feature/stock_hot_xq.py +4 -6
  272. akshare/stock_feature/stock_hsgt_em.py +269 -97
  273. akshare/stock_feature/stock_hsgt_exchange_rate.py +115 -87
  274. akshare/stock_feature/stock_hsgt_min_em.py +13 -16
  275. akshare/stock_feature/stock_info.py +7 -80
  276. akshare/stock_feature/stock_inner_trade_xq.py +38 -31
  277. akshare/stock_feature/stock_jgdy_em.py +43 -40
  278. akshare/stock_feature/stock_lhb_em.py +119 -3
  279. akshare/stock_feature/stock_margin_em.py +0 -1
  280. akshare/stock_feature/stock_margin_sse.py +0 -2
  281. akshare/stock_feature/stock_pankou_em.py +71 -35
  282. akshare/stock_feature/stock_qsjy_em.py +13 -4
  283. akshare/stock_feature/stock_report_em.py +151 -7
  284. akshare/stock_feature/stock_research_report_em.py +55 -20
  285. akshare/stock_feature/stock_sy_em.py +20 -15
  286. akshare/stock_feature/stock_technology_ths.py +122 -77
  287. akshare/stock_feature/stock_tfp_em.py +2 -1
  288. akshare/stock_feature/stock_three_report_em.py +21 -5
  289. akshare/stock_feature/stock_ttm_lyr.py +18 -9
  290. akshare/stock_feature/stock_value_em.py +83 -0
  291. akshare/stock_feature/stock_yjbb_em.py +58 -32
  292. akshare/stock_feature/stock_yjyg_cninfo.py +6 -2
  293. akshare/stock_feature/stock_yjyg_em.py +1 -1
  294. akshare/stock_feature/stock_yzxdr_em.py +24 -22
  295. akshare/stock_feature/stock_zdhtmx_em.py +20 -6
  296. akshare/stock_feature/stock_zh_vote_baidu.py +4 -1
  297. akshare/stock_feature/stock_ztb_em.py +39 -24
  298. akshare/stock_fundamental/__init__.py +1 -1
  299. akshare/stock_fundamental/stock_basic_info_xq.py +119 -0
  300. akshare/stock_fundamental/{stock_finance_hk.py → stock_finance_hk_em.py} +23 -16
  301. akshare/stock_fundamental/{stock_finance.py → stock_finance_sina.py} +60 -7
  302. akshare/stock_fundamental/stock_finance_ths.py +524 -57
  303. akshare/stock_fundamental/stock_finance_us_em.py +268 -0
  304. akshare/stock_fundamental/stock_gbjg_em.py +80 -0
  305. akshare/stock_fundamental/stock_hold.py +26 -17
  306. akshare/stock_fundamental/stock_ipo_declare.py +1 -0
  307. akshare/stock_fundamental/stock_kcb_detail_sse.py +10 -10
  308. akshare/stock_fundamental/stock_kcb_sse.py +26 -25
  309. akshare/stock_fundamental/stock_notice.py +12 -3
  310. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  311. akshare/stock_fundamental/stock_profit_forecast_hk_etnet.py +64 -41
  312. akshare/stock_fundamental/stock_profit_forecast_ths.py +86 -35
  313. akshare/stock_fundamental/stock_recommend.py +20 -4
  314. akshare/stock_fundamental/stock_zygc.py +5 -62
  315. akshare/utils/context.py +43 -0
  316. akshare/utils/demjson.py +2009 -1338
  317. akshare/utils/func.py +49 -2
  318. akshare/utils/multi_decrypt.py +53 -0
  319. akshare/utils/token_process.py +6 -5
  320. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/METADATA +54 -80
  321. akshare-1.17.99.dist-info/RECORD +409 -0
  322. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/WHEEL +1 -1
  323. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info/licenses}/LICENSE +1 -1
  324. tests/test_func.py +3 -5
  325. akshare/bond/bond_futures.py +0 -50
  326. akshare/bond/bond_investing.py +0 -139
  327. akshare/crypto/crypto_hist_investing.py +0 -249
  328. akshare/fund/fund_announcement.py +0 -56
  329. akshare/futures/futures_international.py +0 -170
  330. akshare/futures/futures_news_baidu.py +0 -54
  331. akshare/futures/inventory_data.py +0 -100
  332. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  333. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  334. akshare/futures_derivative/futures_index_volatility_nh.py +0 -53
  335. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  336. akshare/index/index_fear_greed_funddb.py +0 -78
  337. akshare/index/index_investing.py +0 -232
  338. akshare/sport/__init__.py +0 -6
  339. akshare/sport/sport_olympic.py +0 -27
  340. akshare/stock_feature/stock_wencai.py +0 -104
  341. akshare/stock_fundamental/stock_mda_ym.py +0 -40
  342. akshare-1.14.49.dist-info/RECORD +0 -387
  343. {akshare-1.14.49.dist-info → akshare-1.17.99.dist-info}/top_level.txt +0 -0
@@ -1,21 +1,22 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2023/5/3 17:00
4
+ Date: 2025/5/5 00:00
5
5
  Desc: 股票数据-总貌-市场总貌
6
6
  股票数据-总貌-成交概括
7
7
  https://www.szse.cn/market/overview/index.html
8
8
  https://www.sse.com.cn/market/stockdata/statistic/
9
9
  """
10
+
10
11
  import warnings
11
- from io import BytesIO
12
+ from io import BytesIO, StringIO
12
13
 
13
14
  import pandas as pd
14
15
  import requests
15
16
  from bs4 import BeautifulSoup
16
17
 
17
18
 
18
- def stock_szse_summary(date: str = "20200619") -> pd.DataFrame:
19
+ def stock_szse_summary(date: str = "20240830") -> pd.DataFrame:
19
20
  """
20
21
  深证证券交易所-总貌-证券类别统计
21
22
  https://www.szse.cn/market/overview/index.html
@@ -37,10 +38,10 @@ def stock_szse_summary(date: str = "20200619") -> pd.DataFrame:
37
38
  warnings.simplefilter("always")
38
39
  temp_df = pd.read_excel(BytesIO(r.content), engine="openpyxl")
39
40
  temp_df["证券类别"] = temp_df["证券类别"].str.strip()
40
- temp_df.iloc[:, 2:] = temp_df.iloc[:, 2:].applymap(lambda x: x.replace(",", ""))
41
+ temp_df.iloc[:, 2:] = temp_df.iloc[:, 2:].map(lambda x: x.replace(",", ""))
41
42
  temp_df.columns = ["证券类别", "数量", "成交金额", "总市值", "流通市值"]
42
- temp_df["数量"] = pd.to_numeric(temp_df["数量"])
43
- temp_df["成交金额"] = pd.to_numeric(temp_df["成交金额"])
43
+ temp_df["数量"] = pd.to_numeric(temp_df["数量"], errors="coerce")
44
+ temp_df["成交金额"] = pd.to_numeric(temp_df["成交金额"], errors="coerce")
44
45
  temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
45
46
  temp_df["流通市值"] = pd.to_numeric(temp_df["流通市值"], errors="coerce")
46
47
  return temp_df
@@ -55,32 +56,55 @@ def stock_szse_area_summary(date: str = "202203") -> pd.DataFrame:
55
56
  :return: 地区交易排序
56
57
  :rtype: pandas.DataFrame
57
58
  """
58
- url = "http://www.szse.cn/api/report/ShowReport"
59
+ url = "https://www.szse.cn/api/report/ShowReport"
59
60
  params = {
60
61
  "SHOWTYPE": "xlsx",
61
62
  "CATALOGID": "1803_sczm",
62
63
  "TABKEY": "tab2",
63
64
  "DATETIME": "-".join([date[:4], date[4:6]]),
64
- "random": "0.39339437497296137",
65
+ "random": "0.39349437497296137",
65
66
  }
66
67
  r = requests.get(url, params=params)
67
68
  with warnings.catch_warnings(record=True):
68
69
  warnings.simplefilter("always")
69
70
  temp_df = pd.read_excel(BytesIO(r.content), engine="openpyxl")
70
- temp_df.columns = ["序号", "地区", "总交易额", "占市场", "股票交易额", "基金交易额", "债券交易额"]
71
+ column_map = {
72
+ "序号": "序号",
73
+ "地区": "地区",
74
+ "总交易额(元)": "总交易额",
75
+ "占市场%": "占市场",
76
+ "股票交易额(元)": "股票交易额",
77
+ "基金交易额(元)": "基金交易额",
78
+ "债券交易额(元)": "债券交易额",
79
+ "优先股交易额(元)": "优先股交易额",
80
+ "期权交易额(元)": "期权交易额",
81
+ }
82
+ temp_df.rename(columns=column_map, inplace=True)
71
83
  temp_df["总交易额"] = temp_df["总交易额"].str.replace(",", "")
72
- temp_df["总交易额"] = pd.to_numeric(temp_df["总交易额"])
73
- temp_df["占市场"] = pd.to_numeric(temp_df["占市场"])
84
+ temp_df["总交易额"] = pd.to_numeric(temp_df["总交易额"], errors="coerce")
85
+ temp_df["占市场"] = pd.to_numeric(temp_df["占市场"], errors="coerce")
74
86
  temp_df["股票交易额"] = temp_df["股票交易额"].str.replace(",", "")
75
87
  temp_df["股票交易额"] = pd.to_numeric(temp_df["股票交易额"], errors="coerce")
76
88
  temp_df["基金交易额"] = temp_df["基金交易额"].str.replace(",", "")
77
89
  temp_df["基金交易额"] = pd.to_numeric(temp_df["基金交易额"], errors="coerce")
78
90
  temp_df["债券交易额"] = temp_df["债券交易额"].str.replace(",", "")
79
91
  temp_df["债券交易额"] = pd.to_numeric(temp_df["债券交易额"], errors="coerce")
92
+ if "优先股交易额" in temp_df.columns:
93
+ temp_df['优先股交易额'] = temp_df['优先股交易额'].astype('str') # 2025年2月为float
94
+ temp_df["优先股交易额"] = temp_df["优先股交易额"].str.replace(",", "")
95
+ temp_df["优先股交易额"] = pd.to_numeric(
96
+ temp_df["优先股交易额"], errors="coerce"
97
+ )
98
+ if "期权交易额" in temp_df.columns:
99
+ temp_df['期权交易额'] = temp_df['期权交易额'].astype('str')
100
+ temp_df["期权交易额"] = temp_df["期权交易额"].str.replace(",", "")
101
+ temp_df["期权交易额"] = pd.to_numeric(temp_df["期权交易额"], errors="coerce")
80
102
  return temp_df
81
103
 
82
104
 
83
- def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> pd.DataFrame:
105
+ def stock_szse_sector_summary(
106
+ symbol: str = "当月", date: str = "202501"
107
+ ) -> pd.DataFrame:
84
108
  """
85
109
  深圳证券交易所-统计资料-股票行业成交数据
86
110
  https://docs.static.szse.cn/www/market/periodical/month/W020220511355248518608.html
@@ -94,13 +118,13 @@ def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> p
94
118
  url = "https://www.szse.cn/market/periodical/month/index.html"
95
119
  r = requests.get(url)
96
120
  r.encoding = "utf8"
97
- soup = BeautifulSoup(r.text, "lxml")
98
- tags_list = soup.find_all("div", attrs={"class": "g-container"})[1].find_all(
121
+ soup = BeautifulSoup(r.text, features="lxml")
122
+ tags_list = soup.find_all(name="div", attrs={"class": "g-container"})[1].find_all(
99
123
  "script"
100
124
  )
101
125
  tags_dict = [
102
126
  eval(
103
- item.string[item.string.find("{") : item.string.find("}") + 1]
127
+ item.string[item.string.find("{"): item.string.find("}") + 1]
104
128
  .replace("\n", "")
105
129
  .replace(" ", "")
106
130
  .replace("value", "'value'")
@@ -115,14 +139,17 @@ def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> p
115
139
  )
116
140
  )
117
141
  date_format = "-".join([date[:4], date[4:]])
118
- url = f"http://www.szse.cn/market/periodical/month/{date_url_dict[date_format]}"
142
+ url = f"https://www.szse.cn/market/periodical/month/{date_url_dict[date_format]}"
119
143
  r = requests.get(url)
120
144
  r.encoding = "utf8"
121
- soup = BeautifulSoup(r.text, "lxml")
122
- url = [item for item in soup.find_all("a") if item.get_text() == "股票行业成交数据"][0]["href"]
145
+ soup = BeautifulSoup(r.text, features="lxml")
146
+ url = [
147
+ item for item in soup.find_all("a") if item.get_text() == "股票行业成交数据"
148
+ ][0]["href"]
123
149
 
124
150
  if symbol == "当月":
125
- temp_df = pd.read_html(url, encoding="gbk")[0]
151
+ r = requests.get(url)
152
+ temp_df = pd.read_html(StringIO(r.text), encoding="gbk")[0]
126
153
  temp_df.columns = [
127
154
  "项目名称",
128
155
  "项目名称-英文",
@@ -149,12 +176,20 @@ def stock_szse_sector_summary(symbol: str = "当月", date: str = "202303") -> p
149
176
  ]
150
177
 
151
178
  temp_df["交易天数"] = pd.to_numeric(temp_df["交易天数"], errors="coerce")
152
- temp_df["成交金额-人民币元"] = pd.to_numeric(temp_df["成交金额-人民币元"], errors="coerce")
153
- temp_df["成交金额-占总计"] = pd.to_numeric(temp_df["成交金额-占总计"], errors="coerce")
179
+ temp_df["成交金额-人民币元"] = pd.to_numeric(
180
+ temp_df["成交金额-人民币元"], errors="coerce"
181
+ )
182
+ temp_df["成交金额-占总计"] = pd.to_numeric(
183
+ temp_df["成交金额-占总计"], errors="coerce"
184
+ )
154
185
  temp_df["成交股数-股数"] = pd.to_numeric(temp_df["成交股数-股数"], errors="coerce")
155
- temp_df["成交股数-占总计"] = pd.to_numeric(temp_df["成交股数-占总计"], errors="coerce")
186
+ temp_df["成交股数-占总计"] = pd.to_numeric(
187
+ temp_df["成交股数-占总计"], errors="coerce"
188
+ )
156
189
  temp_df["成交笔数-笔"] = pd.to_numeric(temp_df["成交笔数-笔"], errors="coerce")
157
- temp_df["成交笔数-占总计"] = pd.to_numeric(temp_df["成交笔数-占总计"], errors="coerce")
190
+ temp_df["成交笔数-占总计"] = pd.to_numeric(
191
+ temp_df["成交笔数-占总计"], errors="coerce"
192
+ )
158
193
  return temp_df
159
194
 
160
195
 
@@ -170,11 +205,11 @@ def stock_sse_summary() -> pd.DataFrame:
170
205
  "sqlId": "COMMON_SSE_SJ_GPSJ_GPSJZM_TJSJ_L",
171
206
  "PRODUCT_NAME": "股票,主板,科创板",
172
207
  "type": "inParams",
173
- "_": "1640855495128",
174
208
  }
175
209
  headers = {
176
210
  "Referer": "http://www.sse.com.cn/",
177
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
211
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
212
+ "Chrome/89.0.4389.90 Safari/537.36",
178
213
  }
179
214
  r = requests.get(url, params=params, headers=headers)
180
215
  data_json = r.json()
@@ -202,427 +237,128 @@ def stock_sse_summary() -> pd.DataFrame:
202
237
  return temp_df
203
238
 
204
239
 
205
- def stock_sse_deal_daily(date: str = "20180117") -> pd.DataFrame:
240
+ def stock_sse_deal_daily(date: str = "20241216") -> pd.DataFrame:
206
241
  """
207
242
  上海证券交易所-数据-股票数据-成交概况-股票成交概况-每日股票情况
208
- http://www.sse.com.cn/market/stockdata/overview/day/
243
+ https://www.sse.com.cn/market/stockdata/overview/day/
244
+ :param date: 交易日
245
+ :type date: str
209
246
  :return: 每日股票情况
210
247
  :rtype: pandas.DataFrame
211
248
  """
212
- if int(date) <= 20181231:
213
- url = "http://query.sse.com.cn/commonQuery.do"
214
- params = {
215
- "searchDate": "-".join([date[:4], date[4:6], date[6:]]),
216
- "sqlId": "COMMON_SSE_SJ_GPSJ_CJGK_DAYCJGK_C",
217
- "stockType": "90",
218
- "_": "1616744620492",
219
- }
220
- headers = {
221
- "Referer": "http://www.sse.com.cn/",
222
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
223
- }
224
- r = requests.get(url, params=params, headers=headers)
225
- data_json = r.json()
226
- temp_df = pd.DataFrame(data_json["result"])
227
- temp_df = temp_df.T
228
- temp_df.reset_index(inplace=True)
249
+ url = "https://query.sse.com.cn/commonQuery.do"
250
+ params = {
251
+ "sqlId": "COMMON_SSE_SJ_GPSJ_CJGK_MRGK_C",
252
+ "PRODUCT_CODE": "01,02,03,11,17",
253
+ "type": "inParams",
254
+ "SEARCH_DATE": "-".join([date[:4], date[4:6], date[6:]]),
255
+ }
256
+ headers = {
257
+ "Referer": "https://www.sse.com.cn/",
258
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
259
+ "Chrome/89.0.4389.90 Safari/537.36",
260
+ }
261
+ r = requests.get(url, params=params, headers=headers)
262
+ data_json = r.json()
263
+ temp_df = pd.DataFrame(data_json["result"])
264
+ temp_df = temp_df.T
265
+ temp_df.reset_index(inplace=True)
266
+ if len(temp_df.columns) == 5:
267
+ # 20250228
229
268
  temp_df.columns = [
230
269
  "单日情况",
231
270
  "主板A",
232
- "-",
233
271
  "主板B",
272
+ "科创板",
273
+ "股票",
234
274
  ]
235
- temp_df = temp_df[
236
- [
237
- "单日情况",
238
- "主板A",
239
- "主板B",
240
- ]
241
- ]
242
- temp_df["单日情况"] = [
243
- "流通市值",
244
- "流通换手率",
245
- "平均市盈率",
246
- "_",
247
- "市价总值",
248
- "_",
249
- "换手率",
250
- "_",
251
- "挂牌数",
252
- "_",
253
- "_",
254
- "_",
255
- "_",
256
- "_",
257
- "成交笔数",
258
- "成交金额",
259
- "成交量",
260
- "次新股换手率",
261
- "_",
262
- "_",
263
- ]
264
- temp_df = temp_df[temp_df["单日情况"] != "_"]
265
- temp_df["单日情况"] = temp_df["单日情况"].astype("category")
266
- list_custom_new = [
267
- "挂牌数",
268
- "市价总值",
269
- "流通市值",
270
- "成交金额",
271
- "成交量",
272
- "成交笔数",
273
- "平均市盈率",
274
- "换手率",
275
- "次新股换手率",
276
- "流通换手率",
277
- ]
278
- temp_df["单日情况"].cat.set_categories(list_custom_new)
279
- temp_df.sort_values("单日情况", ascending=True, inplace=True)
280
- temp_df.reset_index(drop=True, inplace=True)
281
- # 构建空
282
- temp_df['股票'] = "-"
283
- temp_df['科创板'] = "-"
284
- temp_df['股票回购'] = "-"
285
- temp_df["股票"] = pd.to_numeric(temp_df["股票"], errors="coerce")
286
- temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
287
- temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
288
- temp_df["科创板"] = pd.to_numeric("-", errors="coerce") # 默认位空
289
- temp_df["股票回购"] = pd.to_numeric(temp_df["股票回购"], errors="coerce")
290
- temp_df = temp_df[
291
- [
292
- "单日情况",
293
- "股票",
294
- "主板A",
295
- "主板B",
296
- "科创板",
297
- "股票回购",
298
- ]
299
- ]
300
- return temp_df
301
- if int(date) <= 20211224:
302
- url = "http://query.sse.com.cn/commonQuery.do"
303
- params = {
304
- "searchDate": "-".join([date[:4], date[4:6], date[6:]]),
305
- "sqlId": "COMMON_SSE_SJ_GPSJ_CJGK_DAYCJGK_C",
306
- "stockType": "90",
307
- "_": "1616744620492",
308
- }
309
- headers = {
310
- "Referer": "http://www.sse.com.cn/",
311
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
312
- }
313
- r = requests.get(url, params=params, headers=headers)
314
- data_json = r.json()
315
- temp_df = pd.DataFrame(data_json["result"])
316
- temp_df = temp_df.T
317
- temp_df.reset_index(inplace=True)
318
- if len(temp_df.columns) == 6:
319
- temp_df.columns = [
320
- "单日情况",
321
- "-",
322
- "股票",
323
- "主板B",
324
- "主板A",
325
- "股票回购",
326
- ]
327
- temp_df = temp_df[
328
- [
329
- "单日情况",
330
- "股票",
331
- "主板A",
332
- "主板B",
333
- "股票回购",
334
- ]
335
- ]
336
- temp_df["单日情况"] = [
337
- "流通市值",
338
- "流通换手率",
339
- "平均市盈率",
340
- "_",
341
- "市价总值",
342
- "_",
343
- "换手率",
344
- "_",
345
- "挂牌数",
346
- "_",
347
- "_",
348
- "_",
349
- "_",
350
- "_",
351
- "成交笔数",
352
- "成交金额",
353
- "成交量",
354
- "次新股换手率",
355
- "_",
356
- "_",
357
- ]
358
- temp_df = temp_df[temp_df["单日情况"] != "_"]
359
- temp_df["单日情况"] = temp_df["单日情况"].astype("category")
360
- list_custom_new = [
361
- "挂牌数",
362
- "市价总值",
363
- "流通市值",
364
- "成交金额",
365
- "成交量",
366
- "成交笔数",
367
- "平均市盈率",
368
- "换手率",
369
- "次新股换手率",
370
- "流通换手率",
371
- ]
372
- temp_df["单日情况"].cat.set_categories(list_custom_new)
373
- temp_df.sort_values("单日情况", ascending=True, inplace=True)
374
- temp_df.reset_index(drop=True, inplace=True)
375
- temp_df["股票"] = pd.to_numeric(temp_df["股票"], errors="coerce")
376
- temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
377
- temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
378
- temp_df["科创板"] = pd.to_numeric("-", errors="coerce") # 默认位空
379
- temp_df["股票回购"] = pd.to_numeric(temp_df["股票回购"], errors="coerce")
380
- temp_df = temp_df[
381
- [
382
- "单日情况",
383
- "股票",
384
- "主板A",
385
- "主板B",
386
- "科创板",
387
- "股票回购",
388
- ]
389
- ]
390
- return temp_df
391
- else:
392
- temp_df.columns = [
393
- "单日情况",
394
- "主板A",
395
- "股票",
396
- "主板B",
397
- "_",
398
- "股票回购",
399
- "科创板",
400
- ]
401
- temp_df = temp_df[
402
- [
403
- "单日情况",
404
- "股票",
405
- "主板A",
406
- "主板B",
407
- "科创板",
408
- "股票回购",
409
- ]
410
- ]
411
- temp_df["单日情况"] = [
412
- "流通市值",
413
- "流通换手率",
414
- "平均市盈率",
415
- "_",
416
- "市价总值",
417
- "_",
418
- "换手率",
419
- "_",
420
- "挂牌数",
421
- "_",
422
- "_",
423
- "_",
424
- "_",
425
- "_",
426
- "成交笔数",
427
- "成交金额",
428
- "成交量",
429
- "次新股换手率",
430
- "_",
431
- "_",
432
- ]
433
- temp_df = temp_df[temp_df["单日情况"] != "_"]
434
- temp_df["单日情况"] = temp_df["单日情况"].astype("category")
435
- list_custom_new = [
436
- "挂牌数",
437
- "市价总值",
438
- "流通市值",
439
- "成交金额",
440
- "成交量",
441
- "成交笔数",
442
- "平均市盈率",
443
- "换手率",
444
- "次新股换手率",
445
- "流通换手率",
446
- ]
447
- temp_df["单日情况"].cat.set_categories(list_custom_new)
448
- temp_df.sort_values("单日情况", ascending=True, inplace=True)
449
- temp_df.reset_index(drop=True, inplace=True)
450
- temp_df["股票"] = pd.to_numeric(temp_df["股票"], errors="coerce")
451
- temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
452
- temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
453
- temp_df["科创板"] = pd.to_numeric(temp_df["科创板"], errors="coerce")
454
- temp_df["股票回购"] = pd.to_numeric(temp_df["股票回购"], errors="coerce")
455
- return temp_df
456
- elif int(date) <= 20220224:
457
- url = "http://query.sse.com.cn/commonQuery.do"
458
- params = {
459
- "sqlId": "COMMON_SSE_SJ_GPSJ_CJGK_MRGK_C",
460
- "SEARCH_DATE": "-".join([date[:4], date[4:6], date[6:]]),
461
- "_": "1640836561673",
462
- }
463
- headers = {
464
- "Referer": "http://www.sse.com.cn/",
465
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
466
- }
467
- r = requests.get(url, params=params, headers=headers)
468
- data_json = r.json()
469
- temp_df = pd.DataFrame(data_json["result"])
470
- temp_df = temp_df.T
471
- temp_df.reset_index(inplace=True)
275
+ temp_df["股票回购"] = "-"
276
+ elif len(temp_df.columns) == 4:
277
+ # 20220104
472
278
  temp_df.columns = [
473
279
  "单日情况",
474
280
  "主板A",
475
281
  "主板B",
476
282
  "科创板",
477
- "-",
478
- "-",
479
- "-",
480
- "-",
481
- "-",
482
- ]
483
- temp_df = temp_df[
484
- [
485
- "单日情况",
486
- "主板A",
487
- "主板B",
488
- "科创板",
489
- ]
490
- ]
491
- temp_df["单日情况"] = [
492
- "市价总值",
493
- "成交量",
494
- "平均市盈率",
495
- "换手率",
496
- "成交金额",
497
- "-",
498
- "流通市值",
499
- "流通换手率",
500
- "报告日期",
501
- "挂牌数",
502
- "-",
503
283
  ]
504
- temp_df = temp_df[temp_df["单日情况"] != "-"]
505
- temp_df["单日情况"] = temp_df["单日情况"].astype("category")
506
- list_custom_new = [
507
- "挂牌数",
508
- "市价总值",
509
- "流通市值",
510
- "成交金额",
511
- "成交量",
512
- "平均市盈率",
513
- "换手率",
514
- "流通换手率",
515
- ]
516
- temp_df["单日情况"].cat.set_categories(list_custom_new)
517
- temp_df.sort_values("单日情况", ascending=True, inplace=True)
518
- temp_df.reset_index(inplace=True, drop=True)
519
- temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
520
- temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
521
- temp_df["科创板"] = pd.to_numeric(temp_df["科创板"], errors="coerce")
522
- return temp_df
284
+ temp_df["股票"] = "-"
285
+ temp_df["股票回购"] = "-"
523
286
  else:
524
- url = "http://query.sse.com.cn/commonQuery.do"
525
- params = {
526
- "sqlId": "COMMON_SSE_SJ_GPSJ_CJGK_MRGK_C",
527
- "PRODUCT_CODE": "01,02,03,11,17",
528
- "type": "inParams",
529
- "SEARCH_DATE": "-".join([date[:4], date[4:6], date[6:]]),
530
- "_": "1640836561673",
531
- }
532
- headers = {
533
- "Referer": "http://www.sse.com.cn/",
534
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36",
535
- }
536
- r = requests.get(url, params=params, headers=headers)
537
- data_json = r.json()
538
- temp_df = pd.DataFrame(data_json["result"])
539
- temp_df = temp_df.T
540
- temp_df.reset_index(inplace=True)
541
- if len(temp_df.T) == 5:
542
- temp_df.columns = [
543
- "单日情况",
544
- "主板A",
545
- "主板B",
546
- "科创板",
547
- "股票",
548
- ]
549
- temp_df["股票回购"] = "-"
550
- else:
551
- temp_df.columns = [
552
- "单日情况",
553
- "主板A",
554
- "主板B",
555
- "科创板",
556
- "股票回购",
557
- "股票",
558
- ]
559
- temp_df = temp_df[
560
- [
561
- "单日情况",
562
- "股票",
563
- "主板A",
564
- "主板B",
565
- "科创板",
566
- "股票回购",
567
- ]
568
- ]
569
- temp_df["单日情况"] = [
570
- "市价总值",
571
- "成交量",
572
- "平均市盈率",
573
- "换手率",
574
- "成交金额",
575
- "-",
576
- "流通市值",
577
- "流通换手率",
578
- "报告日期",
579
- "挂牌数",
580
- "-",
287
+ temp_df.columns = [
288
+ "单日情况",
289
+ "主板A",
290
+ "主板B",
291
+ "科创板",
292
+ "股票回购",
293
+ "股票",
581
294
  ]
582
- temp_df = temp_df[temp_df["单日情况"] != "-"]
583
- temp_df["单日情况"] = temp_df["单日情况"].astype("category")
584
- list_custom_new = [
585
- "挂牌数",
586
- "市价总值",
587
- "流通市值",
588
- "成交金额",
589
- "成交量",
590
- "平均市盈率",
591
- "换手率",
592
- "流通换手率",
295
+ temp_df = temp_df[
296
+ [
297
+ "单日情况",
298
+ "股票",
299
+ "主板A",
300
+ "主板B",
301
+ "科创板",
302
+ "股票回购",
593
303
  ]
594
- temp_df["单日情况"].cat.set_categories(list_custom_new)
595
- temp_df.sort_values("单日情况", ascending=True, inplace=True)
596
- temp_df.reset_index(inplace=True, drop=True)
597
- temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
598
- temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
599
- temp_df["科创板"] = pd.to_numeric(temp_df["科创板"], errors="coerce")
600
- temp_df["股票"] = pd.to_numeric(temp_df["股票"], errors="coerce")
601
- temp_df["股票回购"] = pd.to_numeric(temp_df["股票回购"], errors="coerce")
602
- return temp_df
304
+ ]
305
+ temp_df["单日情况"] = [
306
+ "市价总值",
307
+ "成交量",
308
+ "平均市盈率",
309
+ "换手率",
310
+ "成交金额",
311
+ "-",
312
+ "流通市值",
313
+ "流通换手率",
314
+ "报告日期",
315
+ "挂牌数",
316
+ "-",
317
+ ]
318
+ temp_df = temp_df[temp_df["单日情况"] != "-"]
319
+ temp_df = temp_df[temp_df["单日情况"] != "报告日期"]
320
+ # 定义期望的指标顺序
321
+ desired_order = [
322
+ "挂牌数",
323
+ "市价总值",
324
+ "流通市值",
325
+ "成交金额",
326
+ "成交量",
327
+ "平均市盈率",
328
+ "换手率",
329
+ "流通换手率",
330
+ ]
331
+ # 使用 categorical 类型重新排序
332
+ temp_df["单日情况"] = pd.Categorical(
333
+ temp_df["单日情况"], categories=desired_order, ordered=True
334
+ )
335
+ # 按照指标排序
336
+ temp_df.sort_values("单日情况", ignore_index=True, inplace=True)
337
+ temp_df["股票"] = pd.to_numeric(temp_df["股票"], errors="coerce")
338
+ temp_df["主板A"] = pd.to_numeric(temp_df["主板A"], errors="coerce")
339
+ temp_df["主板B"] = pd.to_numeric(temp_df["主板B"], errors="coerce")
340
+ temp_df["科创板"] = pd.to_numeric(temp_df["科创板"], errors="coerce")
341
+ temp_df["股票回购"] = pd.to_numeric(temp_df["股票回购"], errors="coerce")
342
+ return temp_df
603
343
 
604
344
 
605
345
  if __name__ == "__main__":
606
- stock_szse_summary_df = stock_szse_summary(date="20070511")
346
+ stock_szse_summary_df = stock_szse_summary(date="20200619")
607
347
  print(stock_szse_summary_df)
608
348
 
609
- stock_szse_area_summary_df = stock_szse_area_summary(date="202203")
349
+ stock_szse_area_summary_df = stock_szse_area_summary(date="202412")
350
+ print(stock_szse_area_summary_df)
351
+
352
+ stock_szse_area_summary_df = stock_szse_area_summary(date="202502")
610
353
  print(stock_szse_area_summary_df)
611
354
 
612
- stock_szse_sector_summary_df = stock_szse_sector_summary(symbol="当月", date="202303")
355
+ stock_szse_sector_summary_df = stock_szse_sector_summary(
356
+ symbol="当月", date="202501"
357
+ )
613
358
  print(stock_szse_sector_summary_df)
614
359
 
615
360
  stock_sse_summary_df = stock_sse_summary()
616
361
  print(stock_sse_summary_df)
617
362
 
618
- stock_sse_deal_daily_df = stock_sse_deal_daily(date="20211221")
619
- print(stock_sse_deal_daily_df)
620
-
621
- stock_sse_deal_daily_df = stock_sse_deal_daily(date="20211227")
622
- print(stock_sse_deal_daily_df)
623
-
624
- stock_sse_deal_daily_df = stock_sse_deal_daily(date="20190613")
625
- print(stock_sse_deal_daily_df)
626
-
627
- stock_sse_deal_daily_df = stock_sse_deal_daily(date="20080131")
363
+ stock_sse_deal_daily_df = stock_sse_deal_daily(date="20250228")
628
364
  print(stock_sse_deal_daily_df)