在现有数据框中更新python excel数据

在现有数据框中更新python excel数据,python,pandas,dataframe,Python,Pandas,Dataframe,我实际上是python的新手,目前我面临一个熊猫数据框架的问题。。。我有一个循环,它在特定条件下输出我每个迭代中一个人/文件夹的名称,我希望这个输出名称立即发送到数据帧,但我在数据帧中得到的只有一行,具有上一次迭代的输出,并且所有上一次迭代的输出都被覆盖。。。 下面是我正在使用的代码 我希望你能理解我的问题并帮助我 from scipy.spatial import distance import csv import dlib import os import numpy as np impo

我实际上是python的新手,目前我面临一个熊猫数据框架的问题。。。我有一个循环,它在特定条件下输出我每个迭代中一个人/文件夹的名称,我希望这个输出名称立即发送到数据帧,但我在数据帧中得到的只有一行,具有上一次迭代的输出,并且所有上一次迭代的输出都被覆盖。。。 下面是我正在使用的代码 我希望你能理解我的问题并帮助我

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()

为什么不初始化一个数据帧列表?继续添加到列表,仅在最后,您应该将其合并到一个大数据帧中并写入
.to_excel
每次写入时都会覆盖excel文件,因此在循环中调用它不是一个好主意,除非您以附加模式打开它。但同样,这是低效的

试着这样做:

df_list = []
for loop in range(0, number_files):
   ...

   for c in range (0,len(chunks)):
        if 'True' in str(chunks[c]):
            ...

            df_list.append(pd.DataFrame({'names': [fname[index]]}))

writer = pd.ExcelWriter('pandas_name11.xlsx', engine='xlsxwriter')
pd.concat(df_list).reset_index(drop=True).to_excel(writer, sheet_name='Sheet1')


如果你想在每一次迭代中重写,你也可以考虑看看.

非常感谢你这么做,但是它总是有一个列在数据框中,一路写了0!“你能告诉我为什么吗?”hamzayahya不能不看你的数据就说。如果问题不大,只需在MS Excel中打开并删除即可。无论如何,如果有帮助的话,你可以把这个答案标记为接受。干杯。兄弟,这看起来很奇怪,这就是为什么我问它实际上看起来像[0 john present],然后在下一行它又像[0 pattrick present]我希望你能理解……还有,代码是否有任何方法可以根据每个名称(即创建名称时)自动在每行前面生成日期和时间@hamzayahya试试这个:
pd.concat(df_list)。重置索引(drop=True)。到excel(书写器,工作表名称='Sheet1')