python generating excel with panda



让我详细告诉你我的问题......我有一个循环,它输出我一个人的名字,如果它存在于我的数据库中,它将被识别,如果它被识别,一个 FOR 循环将输出我这个名字,然后我希望这个名字存储在 excel 表中(即 DATAFRAME(,但它总是存储 FOR 循环在最后一次迭代中给出的名称,而且它在以前的迭代中输出的所有其他名称都会丢失,它肯定是一遍又一遍地重写这是我的完整代码,请具体回答

from scipy.spatial import distance
import csv
import dlib
import os
import numpy as np
import cv2
import pandas as pd
from skimage import  io
import face_recognition
from PIL import Image
with open("Data/train.csv","r") as facefeatures2:
reader=csv.reader(facefeatures2)
featureslist2=[]
for row in reader:
if len(row) != 0:
featureslist2= featureslist2 +[row]
facefeatures2.close()
float_int2=[]
results=[]
for f2 in range(0,len(featureslist2)):
float_int2 = float_int2 +[[float(str) for str in subarray] for subarray in [featureslist2[f2]]]
csv2 = np.vstack(float_int2)
faces_folder_path = "Data/newcropped"
list = os.listdir(faces_folder_path) # dir is your directory path
number_files = len(list)
print (number_files)
writer = pd.ExcelWriter('pandas_name11.xlsx', engine='xlsxwriter')
for loop in range(0,number_files):
print("iteration ="+str(loop+1))
unknown_image = face_recognition.load_image_file(faces_folder_path + "/" + str(loop+1)+".jpg")
cv2.imshow("test",unknown_image)
cv2.waitKey(0)
#### --------------exception handling-----------####
try:
unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]
except  IndexError:
print("--->image is not detectable")
pass
# ...........................#
results = face_recognition.compare_faces(csv2, unknown_face_encoding)
chunks=[results[x:x + 12] for x in range(0, len(results),12)] # splits "results" list into sublists of size 12
dirpath = "Data/eachperson"
fname = []
fname = [f for f in sorted(os.listdir(dirpath))]
counter = 0
index=0
for c in range (0,len(chunks)):
if 'True' in str(chunks[c]):
counter=counter+1
index=c
df = pd.DataFrame({'names': [fname[index]]})
df.to_excel(writer, sheet_name='Sheet1')
if counter !=1 or counter ==0 :
print("student is not present :(")
else:
print(str(fname[index])+" is present!!!")
writer.save()

可以在此处找到类似的问题,其中包含可以解决您问题的答案。

编辑:我将尝试扩展我的答案,而无法测试您的代码。

df = pd.DataFrame({'names': [fname[index]]})

覆盖每个循环中的数据帧。

df.to_excel(writer, sheet_name='Sheet1')

将要写入 Excel 的数据帧存储在第一个工作表上。在下一次迭代中,您将覆盖此信息。Pandas 的 to_excel(( 函数没有追加。

您可以尝试先将所有名称存储在列表中,然后转换为数据帧,然后to_excel((。

names_present = []
for loop in range(0,number_files):
print("iteration ="+str(loop+1))
unknown_image = face_recognition.load_image_file(faces_folder_path + "/" + str(loop+1)+".jpg")
cv2.imshow("test",unknown_image)
cv2.waitKey(0)
#### --------------exception handling-----------####
try:
unknown_face_encoding = face_recognition.face_encodings(unknown_image)[0]
except  IndexError:
print("--->image is not detectable")
pass
# ...........................#
results = face_recognition.compare_faces(csv2, unknown_face_encoding)
chunks=[results[x:x + 12] for x in range(0, len(results),12)] # splits "results" list into sublists of size 12
dirpath = "Data/eachperson"
fname = []
fname = [f for f in sorted(os.listdir(dirpath))]
counter = 0
index=0
for c in range (0,len(chunks)):
if 'True' in str(chunks[c]):
counter=counter+1
index=c
if counter !=1 or counter ==0 :
print("student is not present :(")
else:
print(str(fname[index])+" is present!!!")
# Store all names present in list
names_present.append(str(fname[index])
# Convert list to dataframe and safe
writer = pd.ExcelWriter('pandas_name11.xlsx', engine='xlsxwriter')
df = pd.DataFrame({'names': names_present})
df.to_excel(writer, sheet_name='Sheet1')
writer.save()

最新更新