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

如何在导出修改后的数据时,保留初始读取时跳过的文本行?

解决方法

核心问题是你用skiprows=5直接跳过了前5行,导致这部分内容根本没进入DataFrame,导出时自然丢失。要保留这些行,得把前5行单独读取保存,处理完数据后再和修改后的内容一起写入文件:

步骤1:读取并保存前5行注释/表头

先通过普通文件操作读取原始文件的前5行,原样存成列表:

file_path = 'KSFN9130.WTH'
# 读取前5行的原始内容
with open(file_path, 'r') as f:
    header_lines = [next(f) for _ in range(5)]

步骤2:正常处理数据行(原有逻辑不变)

这部分和你原来的代码一致,继续读取数据行、修改TMAX列:

column_names = ['DATE', 'SRAD', 'TMAX', 'TMIN', 'RAIN']
# 读取数据行(跳过前5行)
df = pd.read_csv(file_path, delim_whitespace=True, skiprows=5, names=column_names, na_values=['M', ' '])

# 以下是你原有的数据处理逻辑,完全保留
df['DATE'] = pd.to_datetime(df['DATE'], format='%Y%j')
df['month'] = df['DATE'].dt.month
df['week'] = df['DATE'].dt.isocalendar().week

summer_mask_idx = (df['month'] == 6) | (df['month'] == 7) | (df['month'] == 8)

for year, group in df[summer_mask_idx].groupby(df['DATE'].dt.year):
    for week, week_group in group.groupby('week'):
        max_tmax_idx = week_group['TMAX'].idxmax()
        df.loc[max_tmax_idx, 'TMAX'] += 2

df.drop(columns=['month','week'], inplace=True)

步骤3:合并内容并写入文件

先把前5行写入目标文件,再用追加模式写入处理后的DataFrame内容,确保格式和原始文件一致:

output_file_path = 'KSTX9130.WTH'
# 先写入前5行表头
with open(output_file_path, 'w') as f:
    f.writelines(header_lines)

# 再追加修改后的数据(无索引、无表头,空格分隔)
df.to_csv(output_file_path, sep=' ', index=False, header=False, mode='a')

关键注意点

  • 前5行用writelines直接写入,完全保留原始格式(包括换行符、空格、注释符号等),不做任何修改。
  • 追加数据时用mode='a',避免覆盖已经写入的前5行。
  • 保持sep=' '和原始文件的分隔符一致,确保后续操作能正常识别文件格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:05