我有两个目录。一个包含图像,另一个包含蒙版。 images文件夹中的每个图像在masks文件夹中都有一个具有相同文件名的mask。现在,我想创建一个熊猫数据框,其中的单个列包含图像位置列表,第二列包含蒙版的相应位置。为了对此进行初步调查,我编写了以下代码:
# Generate a list of all the files and their
def generate_list(images, masks):
images_df = pd.concat([pd.DataFrame([file],
columns=['images']) for file in os.listdir(images)], ignore_index = True)
masks_df = pd.concat([pd.DataFrame([file],
columns=['masks']) for file in os.listdir(masks)], ignore_index = True)
df = pd.concat([images_df, masks_df], axis=0, ignore_index=True)
print(df)
return df
但是,我得到了输出:
images masks
0 47_1.bmp NaN
1 5_1.bmp NaN
2 26_1.bmp NaN
3 24_1.bmp NaN
4 7_1.bmp NaN
5 19_1.bmp NaN
6 19.bmp NaN
7 18.bmp NaN
8 45_1.bmp NaN
26 4_1.bmp NaN
.. ... ...
131 NaN 14.bmp
132 NaN 50_1.bmp
133 NaN 15_1.bmp
134 NaN 28_1.bmp
135 NaN 9_1.bmp
136 NaN 16.bmp
137 NaN 17_1.bmp
138 NaN 17.bmp
139 NaN 33_1.bmp
很显然,os.listdir已经对concat
操作中正在处理的文件列表进行了重新排序。
我将如何去做?
答案 0 :(得分:0)
def generate_list(images, masks):
images_df = pd.concat([pd.DataFrame([images + file]) for file in os.listdir(images)], ignore_index=True)
masks_df = pd.concat([pd.DataFrame([masks + file]) for file in os.listdir(masks)], ignore_index=True)
df = pd.concat([images_df, masks_df], axis=1, ignore_index=True)
return df.sample(frac=1)
这是我的新答案。轴错了!