Python遍历Edgar filings报错,求提取10-K的Item 1C文本至DataFrame方案
解决Edgartools遍历报错及提取10-K Item 1C的实操方案
先搞定遍历Filing对象的报错问题
你循环时出现的“'Filing'对象无法解释为整数”,大概率是循环写法不对。edgartools返回的filings是Filing实例的集合,直接遍历就行,不用搞索引那套。要获取所有文件URL,用列表推导式最直接:
# 假设你已经获取到filings对象 filing_urls = [filing.url for filing in filings]
这样就能得到完整的URL列表,不会触发类型错误。
提取Item 1C并关联到DataFrame
接下来用sec-parsers处理每个10-K,提取Item 1C内容,再和你的filings_df关联:
- 先给
filings_df加一个年份列,从申报日期里提取:
# 假设你的申报日期列叫 'filing_date',先转成datetime类型 filings_df['filing_date'] = pd.to_datetime(filings_df['filing_date']) filings_df['year'] = filings_df['filing_date'].dt.year
- 遍历每个URL,解析10-K并提取Item 1C,同时记录对应的CIK和年份:
from sec_parsers import TenKParser # 准备存储结果的列表 item_1c_data = [] for idx, filing in enumerate(filings): cik = filings_df.iloc[idx]['cik'] # 对应DataFrame里的CIK year = filings_df.iloc[idx]['year'] try: parser = TenKParser(filing.url) ten_k = parser.parse() # 提取Item 1C,注意key可能是'1C'或者'Item 1C',根据实际情况调整 item_1c_text = ten_k.get('1C', {}).get('text', '') item_1c_data.append({ 'cik': cik, 'year': year, 'item_1c': item_1c_text }) except Exception as e: print(f"处理{cik} {year}的10-K时出错: {e}") item_1c_data.append({ 'cik': cik, 'year': year, 'item_1c': None })
- 把提取的结果转成DataFrame,再和原
filings_df关联:
item_1c_df = pd.DataFrame(item_1c_data) # 用CIK和年份做关联键 filings_df = filings_df.merge(item_1c_df, on=['cik', 'year'], how='left')
注意事项
- 要是sec-parsers解析时找不到Item 1C,检查下10-K的结构,有些公司可能把Item 1C放在不同的节点下,可能需要调整key的取值。
- 批量处理时记得加异常捕获,避免单个文件解析失败导致整个程序崩溃。
内容的提问来源于stack exchange,提问作者Sharif
相关产品推荐
相关产品推荐

