解决自动生成mydata_hh_mm格式CSV文件名导入DataFrame的补零问题
问题分析与修复方案
原代码存在的问题
- 小时范围错误:你需要覆盖06-09的小时,但代码中
range(7,10)只包含了07、08、09,漏掉了06 - 补零逻辑错误:
- 小时部分直接拼接
'0' + str(i),写法不通用(如果后续小时为10+会生成010这类错误格式) - 分钟部分未做补零处理,当j为个位数(如5)时,会生成
mydata_07_5.csv,不符合mm为两位数字的命名规则
- 小时部分直接拼接
- 文件读取路径错误:代码中
pd.read_csv(rf'....csv')没有使用生成的file变量,导致实际读取的文件路径完全错误 - 多次
pd.concat效率低下:循环中每次拼接DataFrame会产生额外内存开销,运行效率差
修正后的代码
import pandas as pd # 初始化空列表存储各文件的DataFrame df_list = [] # 遍历06-09的小时(range左闭右开,所以用6到10) for hh in range(6, 10): for mm in range(0, 60): # 用格式化字符串自动补零为两位数字 file_name = f"mydata_{hh:02d}_{mm:02d}.csv" try: # 读取文件并加入列表 df = pd.read_csv(file_name) df_list.append(df) print(f"已读取:{file_name}") except FileNotFoundError: # 处理文件缺失的情况,避免程序崩溃 print(f"未找到文件:{file_name}") # 一次性拼接所有DataFrame,重置索引 alldata = pd.concat(df_list, ignore_index=True)
关键说明
{hh:02d}和{mm:02d}:格式化语法,确保数字被转为两位字符串,不足两位时自动补零(比如6→06,5→05)- 用列表收集DataFrame:相比循环内反复拼接,这种方式内存占用更少、运行速度更快
- 异常捕获:添加
try-except可以避免因个别文件缺失导致整个流程中断
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

