创建关系时从2个不同的目录读取到pandas数据框

时间:2019-06-25 23:20:54

标签: python pandas dataframe io concatenation

我有两个目录。一个包含图像,另一个包含蒙版。 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操作中正在处理的文件列表进行了重新排序。

我将如何去做?

1 个答案:

答案 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)

这是我的新答案。轴错了!