You need to enable JavaScript to run this app. 使用pd.read_fwf读取不定宽空格分隔文件后如何将筛选结果完整写入CSV
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.read_fwf读取不定宽空格分隔文件后如何将筛选结果完整写入CSV

核心原因说明
  • pandas默认的终端打印机制仅展示DataFrame前后各30行内容,中间行用省略号替代。这是打印端的展示规则,不代表read_fwf没有读取到全量数据,内存中存储的DataFrame是完整的。
  • 原写入逻辑存在严重错误。csv.writer.writerow() 要求传入单行的字段值列表,代码中将整个筛选后的DataFrame对象包裹在列表中传入,writer会直接把DataFrame的字符串打印形式(带省略号的截断内容)作为单个字段写入文件,无法实现逐行全量写入。
修正实现方案
  • 无需手动调用csv模块写文件,pandas内置的to_csv()方法可自动完成行列拆分、字段转义,直接实现全量数据写入。
  • 读取阶段显式指定列的字符边界,避免因列间距不统一、STN_NAME字段含空格导致的列错位问题。
可直接运行的修正代码
import os
import pandas as pd

# 根据文件实际字符偏移量定义每列的起止位置,确保STN_NAME列宽度足够容纳带空格的站点名
col_specs = [
    (0, 12),   # STN CODE列
    (13, 21),  # LAT列
    (22, 30),  # LON列
    (31, 37),  # Un_1列
    (38, 67),  # STN_NAME列(预留足够宽度适配带空格的名称)
    (68, 72),  # S_YR列
    (73, 77),  # E_YR列
    (78, 83)   # Un_2列
]

# 全量读取文件
data = pd.read_fwf(
    'radiosonde_stations.csv',
    colspecs=col_specs,
    names=['STN_CODE', 'LAT', 'LON', 'Un_1', 'STN_NAME', 'S_YR', 'E_YR', 'Un_2'],
    infer_nrows=2790
)

# 按经纬度范围筛选符合要求的站点
query = data[
    (data['LAT'] >= -18) 
    & (data['LAT'] <= 45) 
    & (data['LON'] >= 48) 
    & (data['LON'] <= 117)
]

# 全量写入目标文件
output_path = os.path.join('/home/DATA/RADIOSONDE/', 'southeast_asia_stnlist.csv')
# mode='a'为追加模式,首次写入可去掉header=False参数自动生成表头
query.to_csv(output_path, index=False, mode='a', header=False)
关键注意事项
  • 可通过len(query)直接查看筛选后的总行数,验证数据读取的完整性,无需依赖终端打印的截断内容判断数据量。
  • 列宽参数colspecs可根据实际文件的字符偏移量微调,确保不会将STN_NAME的内容切到后续的年份列中。
  • 若为首次写入目标文件,删除代码中的header=False参数,方法会自动将列名作为表头写入,避免后续读取时无列名匹配。

内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 10:27:06