我有一个包含许多图像的目录(* .jpg)。每个图像都有一个名称。在同一目录中,我有一个包含python代码的文件(如下)。
import numpy as np
import pandas as pd
import glob
fd = open('melanoma.csv', 'a')
for img in glob.glob('*.jpg'):
dataFrame = pd.read_csv('allcsv.csv')
name = dataFrame['name']
for i in name:
#print(i)
if(i+'.jpg' == img):
print(i)
在同一目录中,我有另一个文件(allcsv.csv),其中包含目录中所有图像的大量csv数据以及许多其他图像。上面的代码将图像的名称与allcsv.csv文件中的name列进行比较,并打印出名称。我需要修改此代码,将比较图像的一行中的所有数据写入名为“melanoma.csv”的文件中。
例如:
allcsv.csv
name,age,sex
ISIC_001,85,female
ISIC_002,40,female
ISIC_003,30,male
ISIC_004,70,female
如果文件夹仅包含ISIC_002和ISIC_003的图像
melanoma.csv
name,age,sex
ISIC_002,40,female
ISIC_003,30,male
答案 0 :(得分:0)
首先,您的代码会为每个图像读取一次.csv文件。其次,你有一个嵌套的for
- 循环。两者都不理想。我建议采用以下方法:
步骤1 - 创建图像文件名列表
import glob
image_names = [f.replace('.jpg', '') for f in glob.glob("*.jpg")]
第2步 - 使用患者姓名创建数据框
import pandas
df_patients = pd.read_csv('allcsv.csv')
第3步 - 过滤健康患者并转入csv
df_sick = df_patients[df_patients['name'].isin(image_names)]
df_sick.to_csv('melanoma.csv', index = False)
第4步 - 打印病人姓名
for rows in df_sick.iterrows():
print row.name, 'has cancer'
答案 1 :(得分:0)
这只是将匹配值存储到新文件melanoma.csv的解决方案。
您的代码可以进一步改进和优化。
import numpy as np
import pandas as pd
import glob
# Create a dictionary object
d={}
for img in glob.glob('*.jpg'):
dataFrame = pd.read_csv('allcsv.csv')
name = dataFrame['name']
for i in name:
#print(i)
if(i+'.jpg' == img):
# update dictionary d everytime a match is found with all the required values
d['name'] = i
d['age']= dataFrame['age']
d['sex'] = dataFrame['sex']
# convert dictionary d to dataframe
df = pd.DataFrame(d, columns=d.keys())
#Save dataframe to csv
df.to_csv('--file path--/melanoma.csv')