Записывать определенные строки из pandas dataframe в csv файл, перебирая dataframe - PullRequest
0 голосов
/ 05 июня 2018

У меня есть каталог, содержащий много изображений (*. 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 и печатает имена.Мне нужно изменить этот код, чтобы записать все данные в строке сравниваемых изображений в файл с именем '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

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Это просто решение для сохранения совпавших значений в новом файле 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')
0 голосов
/ 05 июня 2018

Во-первых, ваш код читает файл .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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...