Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.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 将某些结果分组到单个Excel选项卡中_Python_Excel_Pandas - Fatal编程技术网

Python 将某些结果分组到单个Excel选项卡中

Python 将某些结果分组到单个Excel选项卡中,python,excel,pandas,Python,Excel,Pandas,我正在编写一个脚本,该脚本连接到Teradata DB,从单个表中读取数据,并对该表运行一些分析 我下面的脚本(对这个问题做了一般化)大部分都很好,但我有两个问题 如何将一些结果合并到单个选项卡上?例如,最小值和最大值,目前被分为各自的选项卡(因为我不知道如何做,否则)。我想要的是这些组合在一个选项卡中,列A列出了列,列B列出了最小值列C列出了最大值 与所示的2个空检查相同 这似乎是一个简单的问题,但如何将底部的行数导出到与它自己的选项卡相同的Excel工作表中?这会抛出一个错误“int没有对象

我正在编写一个脚本,该脚本连接到Teradata DB,从单个表中读取数据,并对该表运行一些分析

我下面的脚本(对这个问题做了一般化)大部分都很好,但我有两个问题

  • 如何将一些结果合并到单个选项卡上?例如,最小值和最大值,目前被分为各自的选项卡(因为我不知道如何做,否则)。我想要的是这些组合在一个选项卡中,列A列出了列,列B列出了最小值列C列出了最大值
  • 与所示的2个空检查相同

  • 这似乎是一个简单的问题,但如何将底部的行数导出到与它自己的选项卡相同的Excel工作表中?这会抛出一个错误“int没有对象到\u excel”
  • 谢谢

    编辑解决了问题1。我刚刚添加了:

    startcol=0
    

    并将它们添加到同一张表中

    import teradata 
    
    import pandas as pd
    
    
    def main():
    
    
        writer = pd.ExcelWriter('table_results.xlsx', engine='xlsxwriter')
        udaExec = teradata.UdaExec(appName="test", version="1.0", logConsole=True)
    
        def func_1():
    
            #connect to Teradata and run SELECT statement on single table
            with udaExec.connect(method="odbc", dsn="xxx", username="xxx", password="xxx") as session:
                query = "Select * from TableA"
    
                # read in records
                df = pd.read_sql(query, session)
    
                # print top 20 records
                head = df.head(20)
                head.to_excel(writer, sheet_name='Top_20')
    
                # columns with NULL values -- returns True/False
                null_columns = df.isnull().any()
                null_columns.to_frame(name='HasNullValues').to_excel(writer, sheet_name='Null_Columns')
    
                # count of NULL values per column
                null_columns_sum = df.isnull().sum()
                null_columns_sum.to_frame(name='NumNullValues').to_excel(writer, sheet_name='Null_Column_Count')
    
                # max value per numeric column
                max_val = df.max(numeric_only=True)
                max_val.to_frame(name='max').to_excel(writer, sheet_name='Max_Val')
    
                # min value per numeric column
                min_val = df.min(numeric_only=True)
                min_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Val')
    
                # count of records -- how to export this to the excel file as it's own tab?  --this errors out
                record_count = df.shape[0]
                record_count.to_excel(writer, sheet_name='Count')
    
    
                writer.close()
    
    
    
    
        func_1()
    
    if __name__ == "__main__":
        main()
    

    对于第一个数据帧,您应该创建一个新的数据帧,该数据帧同时包含最小值和最大值,并复制索引(如果需要):

    如果使用
    startrow
    参数,也可以将多个数据帧写入同一工作表:

    max_val = df.max(numeric_only=True)
    max_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Max')
    
    min_val = df.min(numeric_only=True)
    min_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Max', startrow=df.shape[0] + 3)
    
    本非常好的文档中还提供了其他几个示例:

    对于第二个,writer是一个
    XlsxWriter
    对象,因此您可以在所需的单元格中更新工作表。这应该可以工作(未测试):


    对于第一个数据帧,您应该创建一个新的数据帧,该数据帧同时包含最小值和最大值,并复制索引(如果需要):

    如果使用
    startrow
    参数,也可以将多个数据帧写入同一工作表:

    max_val = df.max(numeric_only=True)
    max_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Max')
    
    min_val = df.min(numeric_only=True)
    min_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Max', startrow=df.shape[0] + 3)
    
    本非常好的文档中还提供了其他几个示例:

    对于第二个,writer是一个
    XlsxWriter
    对象,因此您可以在所需的单元格中更新工作表。这应该可以工作(未测试):


    请将您的代码限制为相关代码,以帮助您回答问题。例如,如果您想在pandas中执行操作,则如何获取数据是非常不相关的。请将您的代码限制为相关代码,以帮助您解决问题。如果您想在pandas中执行操作,则如何获取数据是非常不相关的。谢谢,这对我的剧本很有帮助。谢谢,这对我的剧本很有帮助
    max_val = df.max(numeric_only=True)
    max_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Max')
    
    min_val = df.min(numeric_only=True)
    min_val.to_frame(name='max').to_excel(writer, sheet_name='Min_Max', startrow=df.shape[0] + 3)
    
    min_max_sheet = writer.get_worksheet_by_name("Min_Max")
    min_max_sheet.write(df.shape[0] * 2 + 5, "{} rows".format(df.shape[0]))