Вставьте столбец и обновите значения в столбце, циклически перебирая кадр данных pandas - PullRequest
1 голос
/ 03 мая 2019

Я работаю над сценарием, чтобы извлечь некоторые детали из изображений.Я пытаюсь перебрать кадр данных с именами моих изображений.Как добавить новый столбец в фрейм данных, который будет соответствующим образом заполнять извлеченное имя по имени изображения?

Используемый код находится ниже:

for image in df['images']:
    #lines of code
    concatenated_name = ''.join(name)

    #Help needed 
    df.loc[image, df['images']]['names'] = concatenated_name

Ожидается:

Index images names
0     img_01 TonyStark
1     img_02 Thanos
2     img_03 Thor

Получил:

Index images names
0     img_01 Thor
1     img_02 Thor
2     img_03 Thor

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

После нескольких испытаний, я думаю, у меня есть жизнеспособное решение этого вопроса.

Я использовал вложенную функцию для этого упражнения, чтобы функция 1 зацикливалась на кадре данных файлов и вызывала функцию 2, чтобы извлечь текст, выполнить проверку и вернуть значение, если у изображения было ожидаемое поле. Сначала я создал пустой список, который будет заполняться при каждом запуске функции 2. В конце пользователь может выбрать использование этого списка для создания кадра данных.

# dataframes to store data
df = pd.DataFrame(os.listdir(), columns=['filenames'])
df = df[df['filenames'].str.contains(".png|.jpg|.jpeg")]
df['filenames'] = '\\' + df['filenames']
df1 = [] #Empty list to record details 

# Function 1
def extract_details(df):
    for filename in df['filenames']:
        get_details(filename)

# Function 2
def get_details(filename):
    image = os.getcwd() + filename
    data = pytesseract.image_to_string(Image.open(image))
    .
    .
    . 
    data = ''.join(a) 
    print(filename, data)
    df1.append([filename, data])

df_data = pd.DataFrame(df1, columns=['filenames', 'data']) # Container for final  output
df_data.to_csv('data_list.csv') # Write output to a csv file 
df_data.to_excel('data_list.xlsx') # Write output to an excel file      
0 голосов
/ 03 мая 2019

Используйте apply, чтобы применить функцию к каждой строке:

def get_name(image):
    # Code for getting the name
    return name

df['names'] = df['images'].apply(get_name)

Свернув свой ответ, добавив несколько дополнительных деталей, можно сократить его до:

def get_details(filename):
    image = os.getcwd() + filename
    data = pytesseract.image_to_string(Image.open(image))
    .
    .
    . 
    data = ''.join(a) 
    return data

df['data'] = df['filenames'].apply(get_details)
# save df to csv / excel / other
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...