已提取TSA网站乘客数据,如何正确加载至Pandas DataFrame?
解决TSA乘客数据提取与Pandas规范表格生成问题
先修正数据提取的核心问题
你当前的代码里,doc(".views-align-center").text()会把所有匹配单元格的文本合并成一个无结构的大字符串(所有换行、单元格分隔都变成了空格),这直接导致后续的字符串拆分完全混乱,所以方法1和方法2都无法生成规范表格,得先从数据提取环节修正。
正确的提取与转换步骤
直接按表格的行结构提取数据,再转成DataFrame:
from pyquery import PyQuery as pq import requests import pandas as pd url = "https://www.tsa.gov/travel/passenger-volumes" content = requests.get(url).content doc = pq(content) # 遍历表格的每一行(tbody下的tr) row_items = doc("tbody tr").items() table_data = [] for row in row_items: # 提取当前行所有目标单元格的文本,去除首尾空白 cell_texts = [cell.text().strip() for cell in row(".views-align-center").items()] # 跳过空行 if cell_texts: table_data.append(cell_texts) # 提取表头文本作为列名 header_texts = [header.text().strip() for header in doc("thead th").items()] # 直接生成规范的DataFrame df = pd.DataFrame(table_data, columns=header_texts) print(df.head())
针对你提出的两种方法的分析
方法1与unstack的可行性
方法1的代码pd.DataFrame([x.split(' ') for x in Passengers.split(' ')])会把每个空格都作为拆分依据,得到的是一堆零散的字符串组成的二维列表,结构完全不符合表格的行列逻辑。unstack是用来处理多层索引数据的转置,对这种无结构的拆分结果完全无效,所以这种方式不可行。方法2的问题
方法2只是把空格替换成分号,但原始的Passengers已经丢失了行的分隔信息(text()方法会把原表格的换行全部转成空格),即使替换成分号,也无法区分哪些内容属于同一行,后续无法正确拆分出每行数据,所以方法2也不是有效方案。
内容的提问来源于stack exchange,提问作者prashanth manohar
相关产品推荐
相关产品推荐

