如何正确使用pd.Series加载图片到列表并解决路径排序错误问题
问题原因
该问题不是pd.Series导致的,本质是Path.glob返回的文件列表默认按字符串字典序排序:字符串比较时"10"的首字符'1'ASCII码小于'2',所以10.tif会排在2.tif前面,最终和csv标签拼接时出现错位。
修正方法
提取文件名中的数字序号作为排序依据,对文件路径做自然排序后再生成Series,修改后代码如下:
import numpy as np import pandas as pd from pathlib import Path import os.path image_dir = Path('E:/Notebooks/s2_tiles') cols = ["labels"] # 先获取所有tif文件路径 file_list = list(image_dir.glob('**/*.tif')) # 提取文件名(不含后缀)的数字作为排序键,按数字升序排序 file_list.sort(key=lambda x: int(x.stem)) # 排序后再生成Series filepaths = pd.Series(file_list, name='Filepath').astype(str) labels = pd.read_csv('E:/Notebooks/data.csv', sep=" ", header=None, names=cols) images = pd.concat([filepaths, labels], axis=1)
特殊场景适配
如果你的文件名不是纯数字命名(例如格式为img_1.tif、img_2.tif),只需要修改排序键的提取逻辑即可,示例:
# 提取img_xxx.tif中的xxx数字部分作为排序键 file_list.sort(key=lambda x: int(x.stem.split('_')[1]))
内容的提问来源于stack exchange,提问作者rayan
相关产品推荐
相关产品推荐

