使用pandas将爬取的网页表格拆分为航空公司、目的地独立列表
问题原因
pandas.read_html()返回的airlines[3]是DataFrame类型对象,直接对DataFrame执行for i in xxx循环时,默认迭代对象是列名(表头),不是表格里的行数据,所以循环只能拿到"Airlines"、"Destinations"两个表头字段,读不到实际存储的业务数据。
实现方案
不需要手写逐行循环做提取,pandas原生提供了列数据转Python列表的方法,代码更简洁运行效率更高:
import pandas as pd airlines = pd.read_html('https://en.wikipedia.org/wiki/Tan_Son_Nhat_International_Airport') target_df = airlines[3] # 提取对应列数据,过滤空值后转为原生列表 airlines_list = target_df['Airlines'].dropna().tolist() destination_list = target_df['Destinations'].dropna().tolist()
如果需要逐行遍历做数据清洗(比如去掉维基百科表格自带的[1][2]类引用脚注、多余空白字符),要使用DataFrame的iterrows()方法遍历行,不能直接遍历DataFrame本身:
airlines_list = [] destination_list = [] # 逐行遍历表格 for _, row in target_df.iterrows(): # 跳过空行 if pd.isna(row['Airlines']) or pd.isna(row['Destinations']): continue # 可自定义清洗逻辑 clean_airline = row['Airlines'].strip() clean_dest = row['Destinations'].strip() airlines_list.append(clean_airline) destination_list.append(clean_dest)
注意:维基百科的表格经常会合并单元格、插入引用标记,提取后如果发现数据和预期不符,可以逐行打印row内容做针对性清洗。
内容的提问来源于stack exchange,提问作者Josh Wenner
相关产品推荐
相关产品推荐

