Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过运行函数将多行添加到数据帧_Python_Pandas_Dataframe - Fatal编程技术网

Python 通过运行函数将多行添加到数据帧

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('.//

我运行这个函数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('.//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)