繁体   English   中英

循环遍历 Pandas 数据框时更新列中的值

[英]Update values in a column while looping over through a pandas dataframe

我正在编写一个脚本来从图像中提取一些细节。 我正在尝试遍历具有我的图像名称的数据框。 如何向数据框中添加一个新列,以根据图像名称适当地填充提取的名称?

for image in df['images']:
    concatenated_name                    = ''.join(name)
    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

使用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 循环遍历文件的数据帧并调用函数 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      

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM