You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将从日本气象厅抓取的文本表格转为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 23:20:26