如何从指定URL读取数据并正确解析为结构匹配的pandas DataFrame?
你遇到的错位问题根因是该文件的字段之间采用多个连续空白字符分隔,而非单个制表符或单个空格,自动分隔符推断会默认识别为单空格作为分隔符,导致最后一列包含空格的行业名称被错误拆分,最终出现数据错位。
方案1:正则分隔符读取(优先使用)
通过正则匹配2个及以上连续空白作为分隔符,既可以正确识别字段边界,也不会拆分最后一列内的单个空格:
import pandas as pd url = 'https://download.bls.gov/pub/time.series/ee/ee.industry' df = pd.read_csv( url, sep=r'\s{2,}', # 匹配2个及以上连续空白作为分隔符 engine='python', dtype={'industry_code': str} # 保留行业编码的前导零,避免被转为整数丢失格式 )
方案2:手动拆分读取(兼容性最高)
如果正则匹配存在边界误差,可以直接拉取原始文本手动拆分,完全适配文件的字段规则:
import pandas as pd import requests url = 'https://download.bls.gov/pub/time.series/ee/ee.industry' # 拉取原始文本内容 resp = requests.get(url) lines = resp.text.strip().splitlines() # 提取表头 headers = [col.strip() for col in lines[0].split() if col] rows = [] # 逐行处理数据 for line in lines[1:]: # 仅拆分前3次,剩余所有内容统一归为最后一列行业名称 parts = line.split(maxsplit=3) # 补齐空值避免列长度不匹配 parts += [None] * (4 - len(parts)) rows.append([p.strip() for p in parts]) # 生成DataFrame df = pd.DataFrame(rows, columns=headers)
内容的提问来源于stack exchange,提问作者gr7
相关产品推荐
相关产品推荐

