如何基于字符串包含来合并两个不同长度的数据帧

时间:2019-09-10 12:19:57

标签: python pandas

我正在从事医学成像中的数据增强。我在Pandas数据框中有原始100个图像名称,它们的标签分别为(0和1)。我添加了新图像及其后缀名。

我的原始图像具有诸如Image1,Image2,Image3,Image4的名称,而增强数据具有诸如Image1_1,Image1_2,Image2_1,Image2_2,Image3_1,Image3_2,Image4_1,Image4_2等的名称。

我的Pandas DataFrame包含带有两列的注释:文件名和标签。

我的另一个Pandas Dataframe仅包含原始文件名和扩展文件名,而没有标签。

filename = [f for f in os.listdir(path_to_dir_with_augmented_images)]
annotations = pd.read_csv("annotations.csv", names=["filename", "label"])

filenames = []
for file in filename:
    filenames.append(file)

data = pd.DataFrame(filenames, columns=["filename"]

我的注释文件有100个长度,数据文件有1000个以上。

我想要输出诸如:

filename, label
Image1, 0
Image1aa1, 0
Image1aa2, 0
Image2, 1
Image2baa1, 1
Image2baasa2, 1

如何在熊猫中做到这一点?

1 个答案:

答案 0 :(得分:0)

import pandas as pd

#create dummy data
data = pd.DataFrame([['Image1aa1'], ['Image1aa2'], ['Image2baa1'], ['Image2baasa2']], columns=['filename'])
annotations = pd.DataFrame([['Image1',1],['Image2',0]], columns=['filename','label'])

for name, l in zip(annotations.filename,annotations.label):
    temp = data[data['filename'].str.match(name)]
    temp['label'] = l
    annotations = annotations.append(temp)