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