akshare 1.12.99__py3-none-any.whl → 1.15.72__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.

Potentially problematic release.


This version of akshare might be problematic. Click here for more details.

Files changed (236) hide show
  1. akshare/__init__.py +441 -138
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +29 -43
  4. akshare/air/sunrise_tad.py +32 -17
  5. akshare/bank/bank_cbirc_2020.py +12 -9
  6. akshare/bond/bond_cb_ths.py +17 -9
  7. akshare/bond/bond_china.py +38 -39
  8. akshare/bond/bond_china_money.py +75 -48
  9. akshare/bond/bond_info_cm.py +28 -8
  10. akshare/bond/bond_issue_cninfo.py +73 -30
  11. akshare/bond/bond_zh_cov.py +1 -1
  12. akshare/bond/bond_zh_sina.py +57 -51
  13. akshare/cal/__init__.py +0 -0
  14. akshare/cal/rv.py +170 -0
  15. akshare/cost/cost_living.py +7 -5
  16. akshare/currency/currency_safe.py +7 -6
  17. akshare/data/cninfo.js +15 -0
  18. akshare/datasets.py +10 -21
  19. akshare/economic/macro_bank.py +95 -653
  20. akshare/economic/macro_china.py +772 -1024
  21. akshare/economic/macro_china_hk.py +65 -243
  22. akshare/economic/macro_china_nbs.py +24 -7
  23. akshare/economic/macro_constitute.py +17 -12
  24. akshare/economic/macro_euro.py +13 -6
  25. akshare/economic/macro_finance_ths.py +133 -0
  26. akshare/economic/macro_info_ws.py +100 -0
  27. akshare/economic/macro_japan.py +5 -4
  28. akshare/economic/macro_other.py +12 -9
  29. akshare/economic/macro_usa.py +376 -1940
  30. akshare/economic/marco_cnbs.py +11 -6
  31. akshare/energy/energy_carbon.py +94 -125
  32. akshare/event/migration.py +3 -2
  33. akshare/exceptions.py +43 -0
  34. akshare/file_fold/calendar.json +245 -2
  35. akshare/fortune/fortune_500.py +15 -48
  36. akshare/fund/fund_amac.py +157 -75
  37. akshare/fund/fund_em.py +191 -184
  38. akshare/fund/fund_etf_em.py +16 -15
  39. akshare/fund/fund_etf_sina.py +71 -23
  40. akshare/fund/fund_etf_ths.py +93 -0
  41. akshare/fund/fund_fee_em.py +98 -0
  42. akshare/fund/fund_portfolio_em.py +60 -50
  43. akshare/fund/fund_rank_em.py +91 -82
  44. akshare/fund/fund_report_cninfo.py +63 -48
  45. akshare/fund/fund_scale_sina.py +20 -10
  46. akshare/fund/fund_xq.py +139 -109
  47. akshare/futures/cons.py +8 -31
  48. akshare/futures/cot.py +185 -137
  49. akshare/futures/futures_basis.py +97 -32
  50. akshare/futures/futures_comm_ctp.py +37 -0
  51. akshare/futures/futures_comm_qihuo.py +74 -45
  52. akshare/futures/futures_daily_bar.py +121 -184
  53. akshare/futures/futures_hf_em.py +66 -61
  54. akshare/futures/futures_hq_sina.py +79 -61
  55. akshare/futures/futures_index_ccidx.py +6 -3
  56. akshare/futures/futures_inventory_99.py +61 -272
  57. akshare/futures/futures_news_shmet.py +4 -2
  58. akshare/futures/futures_roll_yield.py +12 -25
  59. akshare/futures/futures_spot_stock_em.py +19 -13
  60. akshare/futures/futures_stock_js.py +14 -12
  61. akshare/futures/futures_to_spot.py +38 -33
  62. akshare/futures/futures_warehouse_receipt.py +75 -71
  63. akshare/futures/futures_zh_sina.py +5 -5
  64. akshare/futures/symbol_var.py +18 -13
  65. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  66. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  67. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  68. akshare/futures_derivative/futures_cot_sina.py +26 -19
  69. akshare/futures_derivative/futures_spot_sys.py +21 -8
  70. akshare/fx/currency_investing.py +19 -285
  71. akshare/index/index_cflp.py +29 -26
  72. akshare/index/index_cni.py +86 -88
  73. akshare/index/index_cons.py +26 -10
  74. akshare/index/index_cx.py +248 -47
  75. akshare/index/index_drewry.py +17 -16
  76. akshare/index/index_option_qvix.py +329 -0
  77. akshare/index/index_research_fund_sw.py +134 -0
  78. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  79. akshare/index/index_spot.py +9 -5
  80. akshare/index/index_stock_hk.py +35 -16
  81. akshare/index/index_stock_us_sina.py +1 -1
  82. akshare/index/index_stock_zh.py +180 -89
  83. akshare/index/index_stock_zh_csindex.py +15 -369
  84. akshare/index/index_sw.py +62 -34
  85. akshare/index/index_yw.py +46 -23
  86. akshare/index/index_zh_a_scope.py +48 -0
  87. akshare/index/index_zh_em.py +6 -4
  88. akshare/interest_rate/interbank_rate_em.py +14 -9
  89. akshare/movie/artist_yien.py +32 -5
  90. akshare/movie/movie_yien.py +92 -18
  91. akshare/movie/video_yien.py +28 -5
  92. akshare/news/news_baidu.py +78 -44
  93. akshare/news/news_cctv.py +38 -38
  94. akshare/news/news_stock.py +6 -3
  95. akshare/nlp/nlp_interface.py +7 -8
  96. akshare/option/cons.py +11 -11
  97. akshare/option/option_comm_qihuo.py +86 -0
  98. akshare/option/option_commodity.py +178 -51
  99. akshare/option/option_daily_stats_sse_szse.py +146 -0
  100. akshare/option/option_em.py +147 -138
  101. akshare/option/option_finance_sina.py +160 -137
  102. akshare/option/option_lhb_em.py +62 -56
  103. akshare/option/option_risk_indicator_sse.py +17 -14
  104. akshare/other/other_car_cpca.py +934 -0
  105. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  106. akshare/qdii/__init__.py +0 -0
  107. akshare/qdii/qdii_jsl.py +233 -0
  108. akshare/request.py +117 -0
  109. akshare/spot/spot_hog_soozhu.py +232 -0
  110. akshare/spot/spot_price_qh.py +121 -0
  111. akshare/spot/spot_sge.py +63 -10
  112. akshare/stock/stock_allotment_cninfo.py +10 -9
  113. akshare/stock/stock_board_concept_em.py +23 -14
  114. akshare/stock/stock_board_industry_em.py +40 -34
  115. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  116. akshare/stock/stock_cg_guarantee.py +41 -51
  117. akshare/stock/stock_cg_lawsuit.py +36 -35
  118. akshare/stock/stock_dividend_cninfo.py +12 -6
  119. akshare/stock/stock_dzjy_em.py +347 -260
  120. akshare/stock/stock_fund_em.py +332 -84
  121. akshare/stock/stock_hk_famous.py +108 -0
  122. akshare/stock/stock_hk_sina.py +8 -7
  123. akshare/stock/stock_hold_control_cninfo.py +100 -15
  124. akshare/stock/stock_hold_control_em.py +4 -3
  125. akshare/stock/stock_hold_num_cninfo.py +18 -12
  126. akshare/stock/stock_hot_rank_em.py +2 -1
  127. akshare/stock/stock_hot_search_baidu.py +5 -2
  128. akshare/stock/stock_industry_cninfo.py +24 -18
  129. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  130. akshare/stock/stock_industry_sw.py +9 -10
  131. akshare/stock/stock_info.py +25 -15
  132. akshare/stock/stock_info_em.py +5 -2
  133. akshare/stock/stock_intraday_em.py +5 -2
  134. akshare/stock/stock_intraday_sina.py +22 -18
  135. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  136. akshare/stock/stock_new_cninfo.py +32 -19
  137. akshare/stock/stock_news_cx.py +39 -0
  138. akshare/stock/stock_profile_cninfo.py +9 -8
  139. akshare/stock/stock_rank_forecast.py +8 -6
  140. akshare/stock/stock_share_changes_cninfo.py +18 -14
  141. akshare/stock/stock_share_hold.py +24 -19
  142. akshare/stock/stock_summary.py +54 -26
  143. akshare/stock/stock_us_famous.py +15 -6
  144. akshare/stock/stock_us_pink.py +7 -5
  145. akshare/stock/stock_us_sina.py +15 -12
  146. akshare/stock/stock_xq.py +38 -12
  147. akshare/stock/stock_zh_a_sina.py +53 -78
  148. akshare/stock/stock_zh_b_sina.py +32 -55
  149. akshare/stock/stock_zh_kcb_report.py +11 -9
  150. akshare/stock/stock_zh_kcb_sina.py +67 -64
  151. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  152. akshare/stock_feature/stock_a_high_low.py +5 -2
  153. akshare/stock_feature/stock_a_indicator.py +12 -9
  154. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  155. akshare/stock_feature/stock_account_em.py +58 -40
  156. akshare/stock_feature/stock_analyst_em.py +36 -27
  157. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  158. akshare/stock_feature/stock_comment_em.py +118 -85
  159. akshare/stock_feature/stock_concept_futu.py +183 -0
  160. akshare/stock_feature/stock_cyq_em.py +58 -54
  161. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  162. akshare/stock_feature/stock_esg_sina.py +216 -11
  163. akshare/stock_feature/stock_fhps_em.py +60 -25
  164. akshare/stock_feature/stock_fhps_ths.py +25 -6
  165. akshare/stock_feature/stock_fund_flow.py +38 -25
  166. akshare/stock_feature/stock_gdfx_em.py +180 -95
  167. akshare/stock_feature/stock_gdhs.py +73 -49
  168. akshare/stock_feature/stock_gpzy_em.py +78 -46
  169. akshare/stock_feature/stock_hist_em.py +55 -23
  170. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  171. akshare/stock_feature/stock_hsgt_em.py +184 -452
  172. akshare/stock_feature/stock_info.py +52 -29
  173. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  174. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  175. akshare/stock_feature/stock_jgdy_em.py +41 -38
  176. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  177. akshare/stock_feature/stock_lhb_em.py +135 -71
  178. akshare/stock_feature/stock_lhb_sina.py +93 -46
  179. akshare/stock_feature/stock_margin_em.py +102 -0
  180. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  181. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  182. akshare/stock_feature/stock_market_legu.py +13 -8
  183. akshare/stock_feature/stock_pankou_em.py +72 -34
  184. akshare/stock_feature/stock_report_em.py +244 -54
  185. akshare/stock_feature/stock_research_report_em.py +48 -19
  186. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  187. akshare/stock_feature/stock_sy_em.py +86 -33
  188. akshare/stock_feature/stock_technology_ths.py +152 -120
  189. akshare/stock_feature/stock_tfp_em.py +35 -13
  190. akshare/stock_feature/stock_three_report_em.py +119 -77
  191. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  192. akshare/stock_feature/stock_value_em.py +83 -0
  193. akshare/stock_feature/stock_wencai.py +21 -9
  194. akshare/stock_feature/stock_yjyg_em.py +63 -28
  195. akshare/stock_feature/stock_zf_pg.py +61 -38
  196. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  197. akshare/stock_feature/stock_ztb_em.py +62 -40
  198. akshare/stock_fundamental/stock_finance.py +150 -58
  199. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  200. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  201. akshare/stock_fundamental/stock_notice.py +29 -15
  202. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  203. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  204. akshare/stock_fundamental/stock_register_em.py +448 -0
  205. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  206. akshare/stock_fundamental/stock_zygc.py +10 -8
  207. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  208. akshare/tool/trade_date_hist.py +4 -3
  209. akshare/utils/cons.py +10 -0
  210. akshare/utils/context.py +43 -0
  211. akshare/utils/demjson.py +2 -2
  212. akshare/utils/func.py +26 -0
  213. akshare/utils/tqdm.py +13 -3
  214. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  215. akshare-1.15.72.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  217. tests/test_func.py +3 -5
  218. akshare/bond/bond_futures.py +0 -50
  219. akshare/bond/bond_investing.py +0 -139
  220. akshare/crypto/crypto_hist_investing.py +0 -249
  221. akshare/fortune/fortune_it_juzi.py +0 -123
  222. akshare/futures/futures_international.py +0 -170
  223. akshare/futures/futures_news_baidu.py +0 -54
  224. akshare/futures/inventory_data.py +0 -100
  225. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  226. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  227. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  228. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  229. akshare/index/index_fear_greed_funddb.py +0 -71
  230. akshare/index/index_investing.py +0 -232
  231. akshare/sport/sport_olympic_winter.py +0 -39
  232. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  233. akshare/stock_fundamental/stock_register.py +0 -292
  234. akshare-1.12.99.dist-info/RECORD +0 -374
  235. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/21 11:00
4
+ Date: 2024/8/15 18:00
5
5
  Desc: 同花顺-数据中心-资金流向
6
6
  同花顺-数据中心-资金流向-个股资金流
7
7
  https://data.10jqka.com.cn/funds/ggzjl/#refCountId=data_55f13c2c_254
@@ -12,12 +12,13 @@ https://data.10jqka.com.cn/funds/hyzjl/#refCountId=data_55f13c2c_254
12
12
  同花顺-数据中心-资金流向-打单追踪
13
13
  https://data.10jqka.com.cn/funds/ddzz/#refCountId=data_55f13c2c_254
14
14
  """
15
+
15
16
  from io import StringIO
16
17
 
17
18
  import pandas as pd
18
19
  import requests
19
20
  from bs4 import BeautifulSoup
20
- from py_mini_racer import py_mini_racer
21
+ import py_mini_racer
21
22
  from akshare.utils.tqdm import get_tqdm
22
23
 
23
24
  from akshare.datasets import get_ths_js
@@ -32,7 +33,7 @@ def _get_file_content_ths(file: str = "ths.js") -> str:
32
33
  :rtype: str
33
34
  """
34
35
  setting_file_path = get_ths_js(file)
35
- with open(setting_file_path) as f:
36
+ with open(setting_file_path, encoding="utf-8") as f:
36
37
  file_data = f.read()
37
38
  return file_data
38
39
 
@@ -60,13 +61,14 @@ def stock_fund_flow_individual(symbol: str = "即时") -> pd.DataFrame:
60
61
  "Host": "data.10jqka.com.cn",
61
62
  "Pragma": "no-cache",
62
63
  "Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
63
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
64
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
65
+ "Chrome/90.0.4430.85 Safari/537.36",
64
66
  "X-Requested-With": "XMLHttpRequest",
65
67
  }
66
68
  url = "http://data.10jqka.com.cn/funds/ggzjl/field/code/order/desc/ajax/1/free/1/"
67
69
  r = requests.get(url, headers=headers)
68
- soup = BeautifulSoup(r.text, "lxml")
69
- raw_page = soup.find("span", attrs={"class": "page_info"}).text
70
+ soup = BeautifulSoup(r.text, features="lxml")
71
+ raw_page = soup.find(name="span", attrs={"class": "page_info"}).text
70
72
  page_num = raw_page.split("/")[1]
71
73
  if symbol == "3日排行":
72
74
  url = "http://data.10jqka.com.cn/funds/ggzjl/board/3/field/zdf/order/desc/page/{}/ajax/1/free/1/"
@@ -95,12 +97,13 @@ def stock_fund_flow_individual(symbol: str = "即时") -> pd.DataFrame:
95
97
  "Host": "data.10jqka.com.cn",
96
98
  "Pragma": "no-cache",
97
99
  "Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
98
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
100
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
101
+ "Chrome/90.0.4430.85 Safari/537.36",
99
102
  "X-Requested-With": "XMLHttpRequest",
100
103
  }
101
104
  r = requests.get(url.format(page), headers=headers)
102
105
  temp_df = pd.read_html(StringIO(r.text))[0]
103
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
106
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
104
107
 
105
108
  del big_df["序号"]
106
109
  big_df.reset_index(inplace=True)
@@ -154,15 +157,16 @@ def stock_fund_flow_concept(symbol: str = "即时") -> pd.DataFrame:
154
157
  "Host": "data.10jqka.com.cn",
155
158
  "Pragma": "no-cache",
156
159
  "Referer": "http://data.10jqka.com.cn/funds/gnzjl/",
157
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
160
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
161
+ "Chrome/90.0.4430.85 Safari/537.36",
158
162
  "X-Requested-With": "XMLHttpRequest",
159
163
  }
160
164
  url = (
161
165
  "http://data.10jqka.com.cn/funds/gnzjl/field/tradezdf/order/desc/ajax/1/free/1/"
162
166
  )
163
167
  r = requests.get(url, headers=headers)
164
- soup = BeautifulSoup(r.text, "lxml")
165
- raw_page = soup.find("span", attrs={"class": "page_info"}).text
168
+ soup = BeautifulSoup(r.text, features="lxml")
169
+ raw_page = soup.find(name="span", attrs={"class": "page_info"}).text
166
170
  page_num = raw_page.split("/")[1]
167
171
  if symbol == "3日排行":
168
172
  url = "http://data.10jqka.com.cn/funds/gnzjl/board/3/field/tradezdf/order/desc/page/{}/ajax/1/free/1/"
@@ -191,12 +195,13 @@ def stock_fund_flow_concept(symbol: str = "即时") -> pd.DataFrame:
191
195
  "Host": "data.10jqka.com.cn",
192
196
  "Pragma": "no-cache",
193
197
  "Referer": "http://data.10jqka.com.cn/funds/gnzjl/",
194
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
198
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
199
+ "Chrome/90.0.4430.85 Safari/537.36",
195
200
  "X-Requested-With": "XMLHttpRequest",
196
201
  }
197
202
  r = requests.get(url.format(page), headers=headers)
198
203
  temp_df = pd.read_html(StringIO(r.text))[0]
199
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
204
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
200
205
 
201
206
  del big_df["序号"]
202
207
  big_df.reset_index(inplace=True)
@@ -218,7 +223,9 @@ def stock_fund_flow_concept(symbol: str = "即时") -> pd.DataFrame:
218
223
  big_df["行业-涨跌幅"] = big_df["行业-涨跌幅"].str.strip("%")
219
224
  big_df["领涨股-涨跌幅"] = big_df["领涨股-涨跌幅"].str.strip("%")
220
225
  big_df["行业-涨跌幅"] = pd.to_numeric(big_df["行业-涨跌幅"], errors="coerce")
221
- big_df["领涨股-涨跌幅"] = pd.to_numeric(big_df["领涨股-涨跌幅"], errors="coerce")
226
+ big_df["领涨股-涨跌幅"] = pd.to_numeric(
227
+ big_df["领涨股-涨跌幅"], errors="coerce"
228
+ )
222
229
  else:
223
230
  big_df.columns = [
224
231
  "序号",
@@ -256,15 +263,16 @@ def stock_fund_flow_industry(symbol: str = "即时") -> pd.DataFrame:
256
263
  "Host": "data.10jqka.com.cn",
257
264
  "Pragma": "no-cache",
258
265
  "Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
259
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
266
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
267
+ "Chrome/90.0.4430.85 Safari/537.36",
260
268
  "X-Requested-With": "XMLHttpRequest",
261
269
  }
262
270
  url = (
263
271
  "http://data.10jqka.com.cn/funds/hyzjl/field/tradezdf/order/desc/ajax/1/free/1/"
264
272
  )
265
273
  r = requests.get(url, headers=headers)
266
- soup = BeautifulSoup(r.text, "lxml")
267
- raw_page = soup.find("span", attrs={"class": "page_info"}).text
274
+ soup = BeautifulSoup(r.text, features="lxml")
275
+ raw_page = soup.find(name="span", attrs={"class": "page_info"}).text
268
276
  page_num = raw_page.split("/")[1]
269
277
  if symbol == "3日排行":
270
278
  url = "http://data.10jqka.com.cn/funds/hyzjl/board/3/field/tradezdf/order/desc/page/{}/ajax/1/free/1/"
@@ -293,12 +301,13 @@ def stock_fund_flow_industry(symbol: str = "即时") -> pd.DataFrame:
293
301
  "Host": "data.10jqka.com.cn",
294
302
  "Pragma": "no-cache",
295
303
  "Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
296
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
304
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
305
+ "Chrome/90.0.4430.85 Safari/537.36",
297
306
  "X-Requested-With": "XMLHttpRequest",
298
307
  }
299
308
  r = requests.get(url.format(page), headers=headers)
300
309
  temp_df = pd.read_html(StringIO(r.text))[0]
301
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
310
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
302
311
 
303
312
  del big_df["序号"]
304
313
  big_df.reset_index(inplace=True)
@@ -320,7 +329,9 @@ def stock_fund_flow_industry(symbol: str = "即时") -> pd.DataFrame:
320
329
  big_df["行业-涨跌幅"] = big_df["行业-涨跌幅"].str.strip("%")
321
330
  big_df["领涨股-涨跌幅"] = big_df["领涨股-涨跌幅"].str.strip("%")
322
331
  big_df["行业-涨跌幅"] = pd.to_numeric(big_df["行业-涨跌幅"], errors="coerce")
323
- big_df["领涨股-涨跌幅"] = pd.to_numeric(big_df["领涨股-涨跌幅"], errors="coerce")
332
+ big_df["领涨股-涨跌幅"] = pd.to_numeric(
333
+ big_df["领涨股-涨跌幅"], errors="coerce"
334
+ )
324
335
  else:
325
336
  big_df.columns = [
326
337
  "序号",
@@ -356,13 +367,14 @@ def stock_fund_flow_big_deal() -> pd.DataFrame:
356
367
  "Host": "data.10jqka.com.cn",
357
368
  "Pragma": "no-cache",
358
369
  "Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
359
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
370
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
371
+ "Chrome/90.0.4430.85 Safari/537.36",
360
372
  "X-Requested-With": "XMLHttpRequest",
361
373
  }
362
374
  url = "http://data.10jqka.com.cn/funds/ddzz/order/desc/ajax/1/free/1/"
363
375
  r = requests.get(url, headers=headers)
364
- soup = BeautifulSoup(r.text, "lxml")
365
- raw_page = soup.find("span", attrs={"class": "page_info"}).text
376
+ soup = BeautifulSoup(r.text, features="lxml")
377
+ raw_page = soup.find(name="span", attrs={"class": "page_info"}).text
366
378
  page_num = raw_page.split("/")[1]
367
379
  url = "http://data.10jqka.com.cn/funds/ddzz/order/asc/page/{}/ajax/1/free/1/"
368
380
  big_df = pd.DataFrame()
@@ -382,12 +394,13 @@ def stock_fund_flow_big_deal() -> pd.DataFrame:
382
394
  "Host": "data.10jqka.com.cn",
383
395
  "Pragma": "no-cache",
384
396
  "Referer": "http://data.10jqka.com.cn/funds/hyzjl/",
385
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.85 Safari/537.36",
397
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
398
+ "Chrome/90.0.4430.85 Safari/537.36",
386
399
  "X-Requested-With": "XMLHttpRequest",
387
400
  }
388
401
  r = requests.get(url.format(page), headers=headers)
389
402
  temp_df = pd.read_html(StringIO(r.text))[0]
390
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
403
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
391
404
 
392
405
  big_df.columns = [
393
406
  "成交时间",
@@ -5,13 +5,14 @@ Date: 2023/11/27 18:00
5
5
  Desc: 东方财富网-数据中心-股东分析
6
6
  https://data.eastmoney.com/gdfx/
7
7
  """
8
+
8
9
  import pandas as pd
9
10
  import requests
10
11
  from tqdm import tqdm
11
12
 
12
13
 
13
14
  def stock_gdfx_free_holding_statistics_em(
14
- date: str = "20210630",
15
+ date: str = "20210630",
15
16
  ) -> pd.DataFrame:
16
17
  """
17
18
  东方财富网-数据中心-股东分析-股东持股统计-十大流通股东
@@ -83,15 +84,33 @@ def stock_gdfx_free_holding_statistics_em(
83
84
  ]
84
85
  ]
85
86
  big_df["统计次数"] = pd.to_numeric(big_df["统计次数"])
86
- big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-10个交易日-平均涨幅"])
87
- big_df["公告日后涨幅统计-10个交易日-最大涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-10个交易日-最大涨幅"])
88
- big_df["公告日后涨幅统计-10个交易日-最小涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-10个交易日-最小涨幅"])
89
- big_df["公告日后涨幅统计-30个交易日-平均涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-30个交易日-平均涨幅"])
90
- big_df["公告日后涨幅统计-30个交易日-最大涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-30个交易日-最大涨幅"])
91
- big_df["公告日后涨幅统计-30个交易日-最小涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-30个交易日-最小涨幅"])
92
- big_df["公告日后涨幅统计-60个交易日-平均涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-60个交易日-平均涨幅"])
93
- big_df["公告日后涨幅统计-60个交易日-最大涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-60个交易日-最大涨幅"])
94
- big_df["公告日后涨幅统计-60个交易日-最小涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-60个交易日-最小涨幅"])
87
+ big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(
88
+ big_df["公告日后涨幅统计-10个交易日-平均涨幅"]
89
+ )
90
+ big_df["公告日后涨幅统计-10个交易日-最大涨幅"] = pd.to_numeric(
91
+ big_df["公告日后涨幅统计-10个交易日-最大涨幅"]
92
+ )
93
+ big_df["公告日后涨幅统计-10个交易日-最小涨幅"] = pd.to_numeric(
94
+ big_df["公告日后涨幅统计-10个交易日-最小涨幅"]
95
+ )
96
+ big_df["公告日后涨幅统计-30个交易日-平均涨幅"] = pd.to_numeric(
97
+ big_df["公告日后涨幅统计-30个交易日-平均涨幅"]
98
+ )
99
+ big_df["公告日后涨幅统计-30个交易日-最大涨幅"] = pd.to_numeric(
100
+ big_df["公告日后涨幅统计-30个交易日-最大涨幅"]
101
+ )
102
+ big_df["公告日后涨幅统计-30个交易日-最小涨幅"] = pd.to_numeric(
103
+ big_df["公告日后涨幅统计-30个交易日-最小涨幅"]
104
+ )
105
+ big_df["公告日后涨幅统计-60个交易日-平均涨幅"] = pd.to_numeric(
106
+ big_df["公告日后涨幅统计-60个交易日-平均涨幅"]
107
+ )
108
+ big_df["公告日后涨幅统计-60个交易日-最大涨幅"] = pd.to_numeric(
109
+ big_df["公告日后涨幅统计-60个交易日-最大涨幅"]
110
+ )
111
+ big_df["公告日后涨幅统计-60个交易日-最小涨幅"] = pd.to_numeric(
112
+ big_df["公告日后涨幅统计-60个交易日-最小涨幅"]
113
+ )
95
114
  return big_df
96
115
 
97
116
 
@@ -167,15 +186,33 @@ def stock_gdfx_holding_statistics_em(date: str = "20210930") -> pd.DataFrame:
167
186
  ]
168
187
  ]
169
188
  big_df["统计次数"] = pd.to_numeric(big_df["统计次数"])
170
- big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-10个交易日-平均涨幅"])
171
- big_df["公告日后涨幅统计-10个交易日-最大涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-10个交易日-最大涨幅"])
172
- big_df["公告日后涨幅统计-10个交易日-最小涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-10个交易日-最小涨幅"])
173
- big_df["公告日后涨幅统计-30个交易日-平均涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-30个交易日-平均涨幅"])
174
- big_df["公告日后涨幅统计-30个交易日-最大涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-30个交易日-最大涨幅"])
175
- big_df["公告日后涨幅统计-30个交易日-最小涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-30个交易日-最小涨幅"])
176
- big_df["公告日后涨幅统计-60个交易日-平均涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-60个交易日-平均涨幅"])
177
- big_df["公告日后涨幅统计-60个交易日-最大涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-60个交易日-最大涨幅"])
178
- big_df["公告日后涨幅统计-60个交易日-最小涨幅"] = pd.to_numeric(big_df["公告日后涨幅统计-60个交易日-最小涨幅"])
189
+ big_df["公告日后涨幅统计-10个交易日-平均涨幅"] = pd.to_numeric(
190
+ big_df["公告日后涨幅统计-10个交易日-平均涨幅"]
191
+ )
192
+ big_df["公告日后涨幅统计-10个交易日-最大涨幅"] = pd.to_numeric(
193
+ big_df["公告日后涨幅统计-10个交易日-最大涨幅"]
194
+ )
195
+ big_df["公告日后涨幅统计-10个交易日-最小涨幅"] = pd.to_numeric(
196
+ big_df["公告日后涨幅统计-10个交易日-最小涨幅"]
197
+ )
198
+ big_df["公告日后涨幅统计-30个交易日-平均涨幅"] = pd.to_numeric(
199
+ big_df["公告日后涨幅统计-30个交易日-平均涨幅"]
200
+ )
201
+ big_df["公告日后涨幅统计-30个交易日-最大涨幅"] = pd.to_numeric(
202
+ big_df["公告日后涨幅统计-30个交易日-最大涨幅"]
203
+ )
204
+ big_df["公告日后涨幅统计-30个交易日-最小涨幅"] = pd.to_numeric(
205
+ big_df["公告日后涨幅统计-30个交易日-最小涨幅"]
206
+ )
207
+ big_df["公告日后涨幅统计-60个交易日-平均涨幅"] = pd.to_numeric(
208
+ big_df["公告日后涨幅统计-60个交易日-平均涨幅"]
209
+ )
210
+ big_df["公告日后涨幅统计-60个交易日-最大涨幅"] = pd.to_numeric(
211
+ big_df["公告日后涨幅统计-60个交易日-最大涨幅"]
212
+ )
213
+ big_df["公告日后涨幅统计-60个交易日-最小涨幅"] = pd.to_numeric(
214
+ big_df["公告日后涨幅统计-60个交易日-最小涨幅"]
215
+ )
179
216
  return big_df
180
217
 
181
218
 
@@ -334,7 +371,7 @@ def stock_gdfx_holding_change_em(date: str = "20210930") -> pd.DataFrame:
334
371
 
335
372
 
336
373
  def stock_gdfx_free_top_10_em(
337
- symbol: str = "sh688686", date: str = "20210630"
374
+ symbol: str = "sh688686", date: str = "20240930"
338
375
  ) -> pd.DataFrame:
339
376
  """
340
377
  东方财富网-个股-十大流通股东
@@ -384,14 +421,16 @@ def stock_gdfx_free_top_10_em(
384
421
  "变动比率",
385
422
  ]
386
423
  ]
387
- temp_df["持股数"] = pd.to_numeric(temp_df["持股数"])
388
- temp_df["占总流通股本持股比例"] = pd.to_numeric(temp_df["占总流通股本持股比例"])
389
- temp_df["变动比率"] = pd.to_numeric(temp_df["变动比率"])
424
+ temp_df["持股数"] = pd.to_numeric(temp_df["持股数"], errors="coerce")
425
+ temp_df["占总流通股本持股比例"] = pd.to_numeric(
426
+ temp_df["占总流通股本持股比例"], errors="coerce"
427
+ )
428
+ temp_df["变动比率"] = pd.to_numeric(temp_df["变动比率"], errors="coerce")
390
429
  return temp_df
391
430
 
392
431
 
393
432
  def stock_gdfx_top_10_em(
394
- symbol: str = "sh688686", date: str = "20210630"
433
+ symbol: str = "sh688686", date: str = "20210630"
395
434
  ) -> pd.DataFrame:
396
435
  """
397
436
  东方财富网-个股-十大股东
@@ -477,24 +516,27 @@ def stock_gdfx_free_holding_detail_em(date: str = "20210930") -> pd.DataFrame:
477
516
 
478
517
  big_df.reset_index(inplace=True)
479
518
  big_df["index"] = big_df.index + 1
480
- big_df.rename(columns={
481
- "index": "序号",
482
- "HOLDER_NAME": "股东名称",
483
- "HOLDER_TYPE": "股东类型",
484
- "SHARES_TYPE": "股份类型",
485
- "HOLDER_RANK": "股东排名",
486
- "SECURITY_CODE": "股票代码",
487
- "SECURITY_NAME_ABBR": "股票简称",
488
- "HOLD_NUM": "期末持股-数量",
489
- "FREE_HOLDNUM_RATIO": "期末持股-持股占流通股比",
490
- "XZCHANGE": "期末持股-数量变化",
491
- "CHANGE_RATIO": "期末持股-数量变化比例",
492
- "HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
493
- "HOLDER_MARKET_CAP": "期末持股-流通市值",
494
- "END_DATE": "报告期",
495
- "UPDATE_DATE": "公告日",
496
- "REPORT_DATE_NAME": "报告名称",
497
- }, inplace=True)
519
+ big_df.rename(
520
+ columns={
521
+ "index": "序号",
522
+ "HOLDER_NAME": "股东名称",
523
+ "HOLDER_TYPE": "股东类型",
524
+ "SHARES_TYPE": "股份类型",
525
+ "HOLDER_RANK": "股东排名",
526
+ "SECURITY_CODE": "股票代码",
527
+ "SECURITY_NAME_ABBR": "股票简称",
528
+ "HOLD_NUM": "期末持股-数量",
529
+ "FREE_HOLDNUM_RATIO": "期末持股-持股占流通股比",
530
+ "XZCHANGE": "期末持股-数量变化",
531
+ "CHANGE_RATIO": "期末持股-数量变化比例",
532
+ "HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
533
+ "HOLDER_MARKET_CAP": "期末持股-流通市值",
534
+ "END_DATE": "报告期",
535
+ "UPDATE_DATE": "公告日",
536
+ "REPORT_DATE_NAME": "报告名称",
537
+ },
538
+ inplace=True,
539
+ )
498
540
 
499
541
  big_df = big_df[
500
542
  [
@@ -515,13 +557,21 @@ def stock_gdfx_free_holding_detail_em(date: str = "20210930") -> pd.DataFrame:
515
557
  big_df["报告期"] = pd.to_datetime(big_df["报告期"], errors="coerce").dt.date
516
558
  big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
517
559
  big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
518
- big_df["期末持股-数量变化"] = pd.to_numeric(big_df["期末持股-数量变化"], errors="coerce")
519
- big_df["期末持股-数量变化比例"] = pd.to_numeric(big_df["期末持股-数量变化比例"], errors="coerce")
520
- big_df["期末持股-流通市值"] = pd.to_numeric(big_df["期末持股-流通市值"], errors="coerce")
560
+ big_df["期末持股-数量变化"] = pd.to_numeric(
561
+ big_df["期末持股-数量变化"], errors="coerce"
562
+ )
563
+ big_df["期末持股-数量变化比例"] = pd.to_numeric(
564
+ big_df["期末持股-数量变化比例"], errors="coerce"
565
+ )
566
+ big_df["期末持股-流通市值"] = pd.to_numeric(
567
+ big_df["期末持股-流通市值"], errors="coerce"
568
+ )
521
569
  return big_df
522
570
 
523
571
 
524
- def stock_gdfx_holding_detail_em(date: str = "20230331", indicator: str = "个人", symbol: str = "新进") -> pd.DataFrame:
572
+ def stock_gdfx_holding_detail_em(
573
+ date: str = "20230331", indicator: str = "个人", symbol: str = "新进"
574
+ ) -> pd.DataFrame:
525
575
  """
526
576
  东方财富网-数据中心-股东分析-股东持股明细-十大股东
527
577
  https://data.eastmoney.com/gdfx/HoldingAnalyse.html
@@ -559,22 +609,24 @@ def stock_gdfx_holding_detail_em(date: str = "20230331", indicator: str = "个
559
609
 
560
610
  big_df.reset_index(inplace=True)
561
611
  big_df["index"] = big_df.index + 1
562
- big_df.rename(columns={
563
- "index": "序号",
564
- "HOLDER_NAME": "股东名称",
565
- "HOLDER_NEWTYPE": "股东类型",
566
- "RANK": "股东排名",
567
- "SECURITY_CODE": "股票代码",
568
- "SECURITY_NAME_ABBR": "股票简称",
569
- "END_DATE": "报告期",
570
- "HOLD_NUM": "期末持股-数量",
571
- "HOLD_NUM_CHANGE": "期末持股-数量变化",
572
- "HOLD_RATIO_CHANGE": "期末持股-数量变化比例",
573
- "HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
574
- "HOLDER_MARKET_CAP": "期末持股-流通市值",
575
- "NOTICE_DATE": "公告日",
576
-
577
- }, inplace=True)
612
+ big_df.rename(
613
+ columns={
614
+ "index": "序号",
615
+ "HOLDER_NAME": "股东名称",
616
+ "HOLDER_NEWTYPE": "股东类型",
617
+ "RANK": "股东排名",
618
+ "SECURITY_CODE": "股票代码",
619
+ "SECURITY_NAME_ABBR": "股票简称",
620
+ "END_DATE": "报告期",
621
+ "HOLD_NUM": "期末持股-数量",
622
+ "HOLD_NUM_CHANGE": "期末持股-数量变化",
623
+ "HOLD_RATIO_CHANGE": "期末持股-数量变化比例",
624
+ "HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
625
+ "HOLDER_MARKET_CAP": "期末持股-流通市值",
626
+ "NOTICE_DATE": "公告日",
627
+ },
628
+ inplace=True,
629
+ )
578
630
 
579
631
  big_df = big_df[
580
632
  [
@@ -596,9 +648,15 @@ def stock_gdfx_holding_detail_em(date: str = "20230331", indicator: str = "个
596
648
  big_df["报告期"] = pd.to_datetime(big_df["报告期"], errors="coerce").dt.date
597
649
  big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
598
650
  big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
599
- big_df["期末持股-数量变化"] = pd.to_numeric(big_df["期末持股-数量变化"], errors="coerce")
600
- big_df["期末持股-数量变化比例"] = pd.to_numeric(big_df["期末持股-数量变化比例"], errors="coerce")
601
- big_df["期末持股-流通市值"] = pd.to_numeric(big_df["期末持股-流通市值"], errors="coerce")
651
+ big_df["期末持股-数量变化"] = pd.to_numeric(
652
+ big_df["期末持股-数量变化"], errors="coerce"
653
+ )
654
+ big_df["期末持股-数量变化比例"] = pd.to_numeric(
655
+ big_df["期末持股-数量变化比例"], errors="coerce"
656
+ )
657
+ big_df["期末持股-流通市值"] = pd.to_numeric(
658
+ big_df["期末持股-流通市值"], errors="coerce"
659
+ )
602
660
  big_df["股东排名"] = pd.to_numeric(big_df["股东排名"], errors="coerce")
603
661
  return big_df
604
662
 
@@ -637,23 +695,26 @@ def stock_gdfx_free_holding_analyse_em(date: str = "20230930") -> pd.DataFrame:
637
695
 
638
696
  big_df.reset_index(inplace=True)
639
697
  big_df["index"] = big_df.index + 1
640
- big_df.rename(columns={
641
- "index": "序号",
642
- "HOLDER_NAME": "股东名称",
643
- "HOLDER_TYPE": "股东类型",
644
- "SECURITY_CODE": "股票代码",
645
- "SECURITY_NAME_ABBR": "股票简称",
646
- "END_DATE": "报告期",
647
- "HOLD_NUM": "期末持股-数量",
648
- "XZCHANGE": "期末持股-数量变化",
649
- "HOLD_RATIO_CHANGE": "期末持股-数量变化比例",
650
- "HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
651
- "HOLDER_MARKET_CAP": "期末持股-流通市值",
652
- "UPDATE_DATE": "公告日",
653
- "D10_ADJCHRATE": "公告日后涨跌幅-10个交易日",
654
- "D30_ADJCHRATE": "公告日后涨跌幅-30个交易日",
655
- "D60_ADJCHRATE": "公告日后涨跌幅-60个交易日",
656
- }, inplace=True)
698
+ big_df.rename(
699
+ columns={
700
+ "index": "序号",
701
+ "HOLDER_NAME": "股东名称",
702
+ "HOLDER_TYPE": "股东类型",
703
+ "SECURITY_CODE": "股票代码",
704
+ "SECURITY_NAME_ABBR": "股票简称",
705
+ "END_DATE": "报告期",
706
+ "HOLD_NUM": "期末持股-数量",
707
+ "XZCHANGE": "期末持股-数量变化",
708
+ "HOLD_RATIO_CHANGE": "期末持股-数量变化比例",
709
+ "HOLDNUM_CHANGE_NAME": "期末持股-持股变动",
710
+ "HOLDER_MARKET_CAP": "期末持股-流通市值",
711
+ "UPDATE_DATE": "公告日",
712
+ "D10_ADJCHRATE": "公告日后涨跌幅-10个交易日",
713
+ "D30_ADJCHRATE": "公告日后涨跌幅-30个交易日",
714
+ "D60_ADJCHRATE": "公告日后涨跌幅-60个交易日",
715
+ },
716
+ inplace=True,
717
+ )
657
718
  big_df = big_df[
658
719
  [
659
720
  "序号",
@@ -676,12 +737,24 @@ def stock_gdfx_free_holding_analyse_em(date: str = "20230930") -> pd.DataFrame:
676
737
  big_df["报告期"] = pd.to_datetime(big_df["报告期"], errors="coerce").dt.date
677
738
  big_df["公告日"] = pd.to_datetime(big_df["公告日"], errors="coerce").dt.date
678
739
  big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
679
- big_df["期末持股-数量变化"] = pd.to_numeric(big_df["期末持股-数量变化"], errors="coerce")
680
- big_df["期末持股-数量变化比例"] = pd.to_numeric(big_df["期末持股-数量变化比例"], errors="coerce")
681
- big_df["期末持股-流通市值"] = pd.to_numeric(big_df["期末持股-流通市值"], errors="coerce")
682
- big_df["公告日后涨跌幅-10个交易日"] = pd.to_numeric(big_df["公告日后涨跌幅-10个交易日"], errors="coerce")
683
- big_df["公告日后涨跌幅-30个交易日"] = pd.to_numeric(big_df["公告日后涨跌幅-30个交易日"], errors="coerce")
684
- big_df["公告日后涨跌幅-60个交易日"] = pd.to_numeric(big_df["公告日后涨跌幅-60个交易日"], errors="coerce")
740
+ big_df["期末持股-数量变化"] = pd.to_numeric(
741
+ big_df["期末持股-数量变化"], errors="coerce"
742
+ )
743
+ big_df["期末持股-数量变化比例"] = pd.to_numeric(
744
+ big_df["期末持股-数量变化比例"], errors="coerce"
745
+ )
746
+ big_df["期末持股-流通市值"] = pd.to_numeric(
747
+ big_df["期末持股-流通市值"], errors="coerce"
748
+ )
749
+ big_df["公告日后涨跌幅-10个交易日"] = pd.to_numeric(
750
+ big_df["公告日后涨跌幅-10个交易日"], errors="coerce"
751
+ )
752
+ big_df["公告日后涨跌幅-30个交易日"] = pd.to_numeric(
753
+ big_df["公告日后涨跌幅-30个交易日"], errors="coerce"
754
+ )
755
+ big_df["公告日后涨跌幅-60个交易日"] = pd.to_numeric(
756
+ big_df["公告日后涨跌幅-60个交易日"], errors="coerce"
757
+ )
685
758
  return big_df
686
759
 
687
760
 
@@ -718,7 +791,7 @@ def stock_gdfx_holding_analyse_em(date: str = "20230331") -> pd.DataFrame:
718
791
  big_df = pd.concat([big_df, temp_df], ignore_index=True)
719
792
 
720
793
  big_df.reset_index(inplace=True)
721
- big_df['index'] = big_df['index'] + 1
794
+ big_df["index"] = big_df["index"] + 1
722
795
  big_df.rename(
723
796
  columns={
724
797
  "index": "序号",
@@ -766,12 +839,24 @@ def stock_gdfx_holding_analyse_em(date: str = "20230331") -> pd.DataFrame:
766
839
  big_df["公告日"] = pd.to_datetime(big_df["公告日"]).dt.date
767
840
  big_df["报告期"] = pd.to_datetime(big_df["报告期"]).dt.date
768
841
  big_df["期末持股-数量"] = pd.to_numeric(big_df["期末持股-数量"], errors="coerce")
769
- big_df["期末持股-数量变化"] = pd.to_numeric(big_df["期末持股-数量变化"], errors="coerce")
770
- big_df["期末持股-数量变化比例"] = pd.to_numeric(big_df["期末持股-数量变化比例"], errors="coerce")
771
- big_df["期末持股-流通市值"] = pd.to_numeric(big_df["期末持股-流通市值"], errors="coerce")
772
- big_df["公告日后涨跌幅-10个交易日"] = pd.to_numeric(big_df["公告日后涨跌幅-10个交易日"], errors="coerce")
773
- big_df["公告日后涨跌幅-30个交易日"] = pd.to_numeric(big_df["公告日后涨跌幅-30个交易日"], errors="coerce")
774
- big_df["公告日后涨跌幅-60个交易日"] = pd.to_numeric(big_df["公告日后涨跌幅-60个交易日"], errors="coerce")
842
+ big_df["期末持股-数量变化"] = pd.to_numeric(
843
+ big_df["期末持股-数量变化"], errors="coerce"
844
+ )
845
+ big_df["期末持股-数量变化比例"] = pd.to_numeric(
846
+ big_df["期末持股-数量变化比例"], errors="coerce"
847
+ )
848
+ big_df["期末持股-流通市值"] = pd.to_numeric(
849
+ big_df["期末持股-流通市值"], errors="coerce"
850
+ )
851
+ big_df["公告日后涨跌幅-10个交易日"] = pd.to_numeric(
852
+ big_df["公告日后涨跌幅-10个交易日"], errors="coerce"
853
+ )
854
+ big_df["公告日后涨跌幅-30个交易日"] = pd.to_numeric(
855
+ big_df["公告日后涨跌幅-30个交易日"], errors="coerce"
856
+ )
857
+ big_df["公告日后涨跌幅-60个交易日"] = pd.to_numeric(
858
+ big_df["公告日后涨跌幅-60个交易日"], errors="coerce"
859
+ )
775
860
  return big_df
776
861
 
777
862