如何在导出修改后的数据时,保留初始读取时跳过的文本行?
解决方法
核心问题是你用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
相关产品推荐
相关产品推荐

