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