В приведенном ниже коде я пытаюсь получить значение proid и значение uim для каждой строки фрейма данных. Я пытаюсь проанализировать первое и второе значения из значения proid и использовать их для создания нового каталога для каждой записи. Так, например, для первой записи будет создан каталог '/ stuff / _place / 1/2', для второй записи это будет '/ stuff / _place / 2/2'. Проблема, с которой я столкнулся, заключается в том, что он просто создает каталоги с 1 по 9, от '/ stuff / _place / 1' до '' / stuff / _place / 9 ', хотя многие из этих номеров отсутствуют в записи в фрейме данных. Кто-нибудь знает, в чем проблема и как я могу достичь своей первоначальной цели?
Код работал правильно, когда я тестировал его только для первой записи в фрейме данных, используя .iloc [0], как в закомментированном коде ниже. Он начал создавать дополнительные каталоги, когда я попытался использовать iterrows, как в примере ниже.
Как перебирать строки в DataFrame в Pandas?
Code:
# iterows through whole data frame
sampleDf=testDf
for index, row in sampleDf.iterrows():
pid=row['proid'] #sampleDf['proid'].iloc[0]
ImgUrl=row['uim'] #sampleDf['uim'].iloc[0]
# file path where images stored
basePath=‘/stuff/_place/‘
# 1st digit
dig1=str(pid)[0]
# 2nd digit
dig2=str(pid)[1]
# checking if directory exists and making new directory if it doesn't
directory=basePath+dig1+'/'+dig2
if not os.path.exists(directory):
os.makedirs(directory)
Data:
proid uim
123 red
224 veg
456 fog






В чем проблема? Мне пришлось отредактировать код, чтобы он работал, и он работал без проблем. В следующий раз напишите код так, чтобы его можно было скопировать и вставить, а затем запустить без каких-либо изменений.
Следующий код, адаптированный из вашего
import os
import numpy as np
import pandas as pd
# iterows through whole data frame
sampleDf= pd.DataFrame([[123, 'red'], [224, 'veg'], [456, 'fog']],columns=['proid', 'uim'])
for index, row in sampleDf.iterrows():
pid=row['proid'] #sampleDf['proid'].iloc[0]
ImgUrl=row['uim'] #sampleDf['uim'].iloc[0]
# file path where images stored
basePath = "/stuff/_place/"
# 1st digit
dig1=str(pid)[0]
# 2nd digit
dig2=str(pid)[1]
# checking if directory exists and making new directory if it doesn't
directory=basePath+dig1+'/'+dig2
if not os.path.exists(directory):
os.makedirs(directory)
Создает следующие каталоги:
Спасибо, да, похоже, с моей записной книжкой что-то пошло не так. Я думаю, что тестовый фрейм данных, который я использовал, запутался с более ранним фреймом данных, и поэтому использовал весь индекс из более раннего фрейма данных, а не только несколько записей.
Какова логика разделения трехзначного числа на dig1 и dig2?