Python 通过运行函数将多行添加到数据帧
我运行这个函数5次,希望我的数据帧有5行。但是,它只保存最后一行。有人能看到这个问题吗?感谢您的帮助。谢谢 是的,这很粗糙,但我在这一点上尝试了太多的东西Python 通过运行函数将多行添加到数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我运行这个函数5次,希望我的数据帧有5行。但是,它只保存最后一行。有人能看到这个问题吗?感谢您的帮助。谢谢 是的,这很粗糙,但我在这一点上尝试了太多的东西 def Bucket(num1, num2, num3, num4, num5, num6, num7, num8, name, name_total, name_unprocessed, insideframe, counter): for num1 in driver.find_elements_by_xpath('.//
def Bucket(num1, num2, num3, num4, num5, num6, num7, num8, name, name_total, name_unprocessed, insideframe, counter):
for num1 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=a")]' %name):
print('%s a: ' %name + num1.text)
name_unprocessed = num1.text
for num2 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=b")]' %name):
print('%s b: ' %name + num2.text)
for num3 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=c")]' %name):
print('%s c: '%name + num3.text)
for num4 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=d")]' %name):
print('%s d: ' %name + num4.text)
for num5 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=e")]' %name):
print('%s e: ' %name + num5.text)
for num6 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=f")]' %name):
print('%s f: ' %name + num6.text)
for num7 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=g")]' %name):
print('%s g: ' %name + num7.text)
for num8 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=Duplicate")]' %name):
print('%s h: ' %name + num8.text)
name_total = int(num1.text)+int(num2.text)+int(num3.text)+int(num4.text)+int(num5.text)+int(num6.text)+int(num7.text)+int(num8.text)
print('%s Total: ' %name + str(name_total))
DF2 = {'a': ['%s' % Time],
'b': ['%s' % Date],
'c': ['%s' % Day],
'd': ['%s' % int(num1.text)],
'e': ['%s' % int(num2.text)],
'f': ['%s' % int(num3.text)],
'g': ['%s' % int(num4.text)],
'h': ['%s' % int(num5.text)],
'i': ['%s' % int(num6.text)],
'j': ['%s' % int(num7.text)],
'k': ['%s' % int(num8.text)],
'Total': ['%s' % name_total],
'Bucket': ['%s' % name]}
frame2 = DataFrame(DF2)
if counter == 0:
SMSdf = insideframe.append(frame2)
SMS.df = DataFrame(SMSdf, columns=['Time', 'Date', 'Day', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
SMS.df.to_excel('Sprint_Log.xlsx', 'Sheet 1', index=False)
else:
SMSdf = SMSdf.append(frame2)
SMS.df = DataFrame(SMSdf, columns=['Time', 'Date', 'Day', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'Total', 'Bucket'])
SMS.df.to_excel('Log.xlsx', 'Sheet 1', index=False)
counter=+1
Bucket(...1)
Bucket(...2)
Bucket(...3)
Bucket(...4)
Bucket(...5)
每次呼叫
SMS.df.to_excel('Log.xlsx', 'Sheet 1', index=False)
如果Log.xlsx已存在,则覆盖它。这就是为什么只保存最后一行
,
如果传递现有ExcelWriter对象,则工作表将添加到
现有工作簿。这可用于将不同的数据帧保存到一个数据帧
工作手册:
因此,您应该在Bucket之外定义writer,将writer传递给Bucket,并使用SMS.df.to_excelwriter,sheet,index=False。
请注意,您还需要在每次调用Bucket时写入不同的工作表
下面是一个简单的可运行示例,它将两个数据帧保存到一个xlsx文件中,然后将其读回:
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.random.randint(10, size=(5,4)))
df2 = pd.DataFrame(np.random.randint(10, size=(3,6)))
writer = pd.ExcelWriter('/tmp/output.xlsx')
df1.to_excel(writer,'Sheet1')
df2.to_excel(writer,'Sheet2')
writer.save()
reader = pd.ExcelFile('/tmp/output.xlsx')
for sheet in reader.sheet_names:
df = reader.parse(sheet)
print(df)
这就是我如何将其保存到同一excel工作表上的同一数据框中的方法
def Bucket(num1, num2, num3, num4, num5, num6, num7, num8, name, name_total, name_unprocessed, insideframe):
for num1 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=a")]' %name):
print('%s a: ' %name + num1.text)
name_unprocessed = num1.text
for num2 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=b")]' %name):
print('%s b: ' %name + num2.text)
for num3 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=c")]' %name):
print('%s c: '%name + num3.text)
for num4 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=d")]' %name):
print('%s d: ' %name + num4.text)
for num5 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=e")]' %name):
print('%s e: ' %name + num5.text)
for num6 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=f")]' %name):
print('%s f: ' %name + num6.text)
for num7 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=g")]' %name):
print('%s g: ' %name + num7.text)
for num8 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=Duplicate")]' %name):
print('%s h: ' %name + num8.text)
name_total = int(num1.text)+int(num2.text)+int(num3.text)+int(num4.text)+int(num5.text)+int(num6.text)+int(num7.text)+int(num8.text)
print('%s Total: ' %name + str(name_total))
DF2 = {'a': ['%s' % Time],
'b': ['%s' % Date],
'c': ['%s' % Day],
'd': ['%s' % int(num1.text)],
'e': ['%s' % int(num2.text)],
'f': ['%s' % int(num3.text)],
'g': ['%s' % int(num4.text)],
'h': ['%s' % int(num5.text)],
'i': ['%s' % int(num6.text)],
'j': ['%s' % int(num7.text)],
'k': ['%s' % int(num8.text)],
'Total': ['%s' % name_total],
'Bucket': ['%s' % name]}
Bucket.frame2 = DataFrame(DF2)
Bucket(...1)
SMSdf = insideframe.append(Bucket.frame2)
Bucket(...2)
SMSdf = SMSdf.append(Bucket.frame2)
Bucket(...3)
SMSdf = SMSdf.append(Bucket.frame2)
Bucket(...4)
SMSdf = SMSdf.append(Bucket.frame2)
Bucket(...5)
SMSdf = SMSdf.append(Bucket.frame2)
谢谢你的回复-我试过了,它仍然只保存了最后一行。我一辈子都不知道为什么,我的错误。您还必须将第二个参数sheet的值更改为\u excel。否则,我们只会覆盖同一张表。我编辑了这篇文章来说明我的意思。谢谢,unutbu,不幸的是它仍然只保存最后一行。我添加了一个可运行的示例,它将两个数据帧保存到一个xlsx文件中。然后,它将xlsx文件的每一页解析为一个数据帧并打印出来。您可能希望运行它,以确保事情按照广告的方式运行。如果它确实有效,那么将您的代码与此示例进行比较,以找到错误的来源。如果您找不到,我想我们需要查看您的代码的一部分才能找到问题。谢谢您的帮助。我在每次运行Bucket函数之间保存数据帧。我张贴了我的答案。谢谢你的帮助!
import numpy as np
import pandas as pd
df1 = pd.DataFrame(np.random.randint(10, size=(5,4)))
df2 = pd.DataFrame(np.random.randint(10, size=(3,6)))
writer = pd.ExcelWriter('/tmp/output.xlsx')
df1.to_excel(writer,'Sheet1')
df2.to_excel(writer,'Sheet2')
writer.save()
reader = pd.ExcelFile('/tmp/output.xlsx')
for sheet in reader.sheet_names:
df = reader.parse(sheet)
print(df)
def Bucket(num1, num2, num3, num4, num5, num6, num7, num8, name, name_total, name_unprocessed, insideframe):
for num1 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=a")]' %name):
print('%s a: ' %name + num1.text)
name_unprocessed = num1.text
for num2 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=b")]' %name):
print('%s b: ' %name + num2.text)
for num3 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=c")]' %name):
print('%s c: '%name + num3.text)
for num4 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=d")]' %name):
print('%s d: ' %name + num4.text)
for num5 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=e")]' %name):
print('%s e: ' %name + num5.text)
for num6 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=f")]' %name):
print('%s f: ' %name + num6.text)
for num7 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=g")]' %name):
print('%s g: ' %name + num7.text)
for num8 in driver.find_elements_by_xpath('.//a [contains(@href, "%s&singleTopic=1&dashboardSort=Duplicate")]' %name):
print('%s h: ' %name + num8.text)
name_total = int(num1.text)+int(num2.text)+int(num3.text)+int(num4.text)+int(num5.text)+int(num6.text)+int(num7.text)+int(num8.text)
print('%s Total: ' %name + str(name_total))
DF2 = {'a': ['%s' % Time],
'b': ['%s' % Date],
'c': ['%s' % Day],
'd': ['%s' % int(num1.text)],
'e': ['%s' % int(num2.text)],
'f': ['%s' % int(num3.text)],
'g': ['%s' % int(num4.text)],
'h': ['%s' % int(num5.text)],
'i': ['%s' % int(num6.text)],
'j': ['%s' % int(num7.text)],
'k': ['%s' % int(num8.text)],
'Total': ['%s' % name_total],
'Bucket': ['%s' % name]}
Bucket.frame2 = DataFrame(DF2)
Bucket(...1)
SMSdf = insideframe.append(Bucket.frame2)
Bucket(...2)
SMSdf = SMSdf.append(Bucket.frame2)
Bucket(...3)
SMSdf = SMSdf.append(Bucket.frame2)
Bucket(...4)
SMSdf = SMSdf.append(Bucket.frame2)
Bucket(...5)
SMSdf = SMSdf.append(Bucket.frame2)