【问题标题】:How to merge two dataframes with different length based on string contains如何根据字符串合并两个不同长度的数据帧包含
【发布时间】:2019-09-10 21:34:58
【问题描述】:

我正在从事医学成像领域的数据增强工作。我在 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 数据框仅包含原始文件名和不带标签的增强文件名。

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

如何在 Pandas 中做到这一点?

【问题讨论】:

标签: python pandas


【解决方案1】:
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)

【讨论】:

  • 我刚刚编辑了我的问题。我没有带有“_”的完全扩充数据。我已扩充的文件名包含原始文件名的子字符串。
  • 谢谢。我将编辑您之前的代码,它仍然有效!
猜你喜欢
  • 2019-12-29
  • 2019-02-27
  • 1970-01-01
  • 2020-09-07
  • 2012-12-15
  • 2019-10-25
  • 2012-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多