我正在研究从图像中提取一些细节的脚本。我试图遍历具有我的图像名称的数据框。如何在数据框中添加新列,以相对于图像名称适当填充提取的名称?
使用的代码如下:
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
答案 0 :(得分:0)
使用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
答案 1 :(得分:0)
经过多次试验,我认为我对这个问题有一个可行的解决方案。
我在此练习中使用了嵌套函数,因此函数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