如何拆分多空格分隔的文本列并正确存入DataFrame?
拆分EDGAR Master Index数据列的解决方案
你的问题核心是公司名称包含空格,直接用\s+拆分会把名称拆成多列,导致列结构混乱。以下两种方法可以解决:
方法一:使用正则表达式捕获分组
利用后续列的固定格式(Form Type为短标识、CIK为纯数字、日期为YYYY-MM-DD、文件名是路径),用非贪婪匹配保留完整公司名称:
import pandas as pd # 假设df1是已移除无关行、仅存数据行的单列DataFrame pattern = r'^(.*?)\s+([A-Z0-9-]+)\s+(\d+)\s+(\d{4}-\d{2}-\d{2})\s+(.*)$' split_df = df1[0].str.extract(pattern, expand=True) # 重命名列 split_df.columns = ['Company Name', 'Form Type', 'CIK', 'Date Filed', 'File Name']
正则说明:
(.*?):非贪婪匹配,捕获完整公司名称(直到遇到后续列前的连续空格)([A-Z0-9-]+):捕获Form Type(支持字母、数字、短横线)(\d+):捕获纯数字的CIK(\d{4}-\d{2}-\d{2}):捕获标准格式的日期(.*):捕获剩余的完整文件名
方法二:按固定列宽拆分(更高效)
EDGAR的Master Index是固定列宽格式,可以直接通过列位置拆分:
import pandas as pd # 直接读取原txt文件,跳过前7行(含说明行、空行、表头行) # colspecs定义各列的起始-结束位置(可根据实际数据微调) colspecs = [(0, 60), (60, 68), (68, 78), (78, 88), (88, None)] df = pd.read_fwf( 'edgar_index.txt', skiprows=7, colspecs=colspecs, names=['Company Name', 'Form Type', 'CIK', 'Date Filed', 'File Name'] )
这种方法无需提前处理数据行,直接从文件读取即可得到结构正确的DataFrame。
内容的提问来源于stack exchange,提问作者Anik Choudhury
相关产品推荐
相关产品推荐

