遍历熊猫数据框时插入列并更新列中的值

时间:2019-05-03 02:21:28

标签: python pandas dataframe

我正在研究从图像中提取一些细节的脚本。我试图遍历具有我的图像名称的数据框。如何在数据框中添加新列,以相对于图像名称适当填充提取的名称?

使用的代码如下:

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 :(得分: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