如何将从日本气象厅抓取的文本表格转为Pandas DataFrame?
将抓取的日文地震文本表格转换为Pandas DataFrame
以下是针对日本气象厅固定格式文本数据的直接处理方案:
步骤1:预处理文本行
先过滤表头、空行等无效内容,只保留数据行:
# 假设table是你用Beautiful Soup抓取到的pre标签文本 lines = [line for line in table.split('\n') if line.strip() and not line.startswith('発生時刻')]
步骤2:固定宽度格式读取(推荐)
日本气象厅的地震数据为固定宽度排版,用pandas.read_fwf可精准提取每一列:
import pandas as pd from io import StringIO # 将处理后的行转为可读取的字符串流 data_stream = StringIO('\n'.join(lines)) # 定义各列的起始/结束位置(可根据实际抓取文本微调) df = pd.read_fwf( data_stream, colspecs=[(0, 19), (20, 28), (29, 37), (38, 45), (46, 52), (53, None)], names=['occurrence_time', 'latitude', 'longitude', 'depth_km', 'magnitude', 'location'] ) # 将数值列转为数值类型 df[['latitude', 'longitude', 'depth_km', 'magnitude']] = df[['latitude', 'longitude', 'depth_km', 'magnitude']].apply(pd.to_numeric, errors='coerce')
备选方案:正则分割
若不确定固定宽度,可通过正则匹配多空格分割数据:
import pandas as pd import re processed_rows = [] for line in lines: # 以至少两个空格为分隔符拆分每行 row_parts = re.split(r'\s{2,}', line.strip()) processed_rows.append(row_parts) df = pd.DataFrame( processed_rows, columns=['occurrence_time', 'latitude', 'longitude', 'depth_km', 'magnitude', 'location'] ) # 转换数值类型 df[['latitude', 'longitude', 'depth_km', 'magnitude']] = df[['latitude', 'longitude', 'depth_km', 'magnitude']].apply(pd.to_numeric, errors='coerce')
处理完成后,df即为包含地震时间、经纬度、深度、震级等数值的DataFrame,可直接用于后续预测模型构建。
内容的提问来源于stack exchange,提问作者Amaan Tamboli
相关产品推荐
相关产品推荐

