LSTM时间序列预测:DataFrame按月追加排序与完整打印问题
问题解决方案
一、解决月份顺序混乱问题
os.listdir()返回的文件名是按字符串字典序排序的,不是数字顺序,比如"10.xlsx"会排在"2.xlsx"前面,导致数据追加顺序混乱。同时你的代码里直接用pd.read_excel(i)存在路径问题(i是文件名,不是完整路径,若脚本不在目标目录会报错),修正方法如下:
- 先对文件名按数字月份排序
- 拼接完整文件路径读取数据
修改后的核心代码:
Dir_data = '/content/DATA' excel_clean = pd.DataFrame() # 获取所有文件并按月份数字排序 files = os.listdir(Dir_data) # 假设文件名是"1.xlsx"、"2.xlsx"格式,提取文件名前缀的数字排序 files_sorted = sorted(files, key=lambda f: int(os.path.splitext(f)[0])) for filename in files_sorted: # 拼接完整文件路径 file_path = os.path.join(Dir_data, filename) excel_test = pd.read_excel(file_path) # 以下保持你的数据清洗逻辑不变 excel_test.drop(columns=['ff_avg', 'ddd_x', 'ddd_car', 'ff_avg', 'ff_x','ss','Tn','Tx'],inplace = True) excel_test = excel_test.replace(8888,'x').replace(9999,'x').replace('','x') excel_test['RR'] = pd.to_numeric(excel_test['RR'], errors='coerce').astype('float64') excel_test['RH_avg'] = pd.to_numeric(excel_test['RH_avg'], errors='coerce').astype('int64') excel_test['Tavg'] = pd.to_numeric(excel_test['Tavg'], errors='coerce').astype('float64') excel_test['RR'] = excel_test['RR'].fillna(excel_test['RR'].mean()) excel_test['RH_avg'] = excel_test['RH_avg'].fillna(excel_test['RH_avg'].mean()) excel_test['Tavg'] = excel_test['Tavg'].fillna(excel_test['Tavg'].mean()) excel_test['RR'] = excel_test['RR'].round(decimals=1) excel_test['Tavg'] = excel_test['Tavg'].round(decimals=1) excel_clean = pd.concat([excel_clean, excel_test], ignore_index=True)
注:推荐用pd.concat()替代append(),因为append()已被pandas标记为弃用,未来版本会移除。
二、关于完整DataFrame打印的合理性说明
你用pd.set_option()修改打印参数的方法是合理的,但有几点补充:
pd.set_option('max_rows', 99999)会强制打印所有行,若DataFrame行数极多(比如百万级),会导致输出卡顿或终端崩溃,这种情况下更建议用excel_clean.head(50)/excel_clean.tail(50)查看首尾部分,或用excel_clean.info()查看数据结构、缺失值情况pd.describe_option('max_colwidth')是用来查看该参数的说明文档,不是打印数据必需的步骤,可根据需求保留或删除- 若需要完整查看数据,也可以导出到本地文件:
excel_clean.to_excel('/content/cleaned_data.xlsx', index=False)
内容的提问来源于stack exchange,提问作者user14802361
相关产品推荐
相关产品推荐

