Получите заголовки pandas dataframe и создайте новую таблицу Access с ними - PullRequest
0 голосов
/ 10 мая 2019

У меня следующая проблема.Я создаю автономный инструмент ACCESS, и много раз мне приходилось создавать Access CROSSTAB, у которого есть неопределенное количество столбцов, требующих манипулирования данными в полях, выходящих за пределы возможностей Access (из-за сложности операций или их размера).Поэтому я импортирую запрос в виде кадра данных PANDAS, манипулирую им и хочу передать его обратно.У меня есть строки имен под заголовком AGR_NAME и различные типы лицензий в виде столбцов.Поэтому у меня есть первое поле / столбец как TEXT и столбцы как INTEGERS.Заголовки столбцов, например, {52, CN, 55, XX, 71, PR}, но поля заполняются процентами или целыми числами.Как импортировать заголовки (неопределенное число), как в запросе sql, и передавать их обратно в таблицу базы данных Access с преобразованными значениями?Проблема в том, что имя и количество столбцов могут различаться.Только первые столбцы - TEXT, а остальные - INTEGERS (не заголовки).По сути, мне нужно создать новую таблицу из заголовков кадра данных, которые могут различаться по количеству, и заполнить ее преобразованными данными.

LIC_TYPE CE 55 52 XE
AGR_NAME 1  0  1  2
XY       1  1  0  4
XZ       12 3  1  45 
XX       44 5  7  8
ZZ       0  0  1  0

Код, который у меня есть на данный момент:

 import pyodbc 
 import pandas 
 import os 
 import sys 
 import struct


 print("running as {0}-bit".format(struct.calcsize("P") * 8))

 sources = pyodbc.dataSources() dsns = list(sources.keys()) dsns.sort()
 sl = [] 
 for dsn in dsns:
     sl.append('%s [%s]' % (dsn, sources[dsn])) print('\n'.join(sl))

 print(pyodbc.drivers())

 try:
     currdir = os.path.abspath(__file__) 

 except NameError: 
 import sys 
 currdir = os.path.abspath(os.path.dirname(sys.argv[0])) 

 DBfile = os.path.join(currdir, 'UNION.accdb') 
 cnxn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' %DBfile) 
 sql = "Select * FROM pivooo" df = pandas.read_sql(sql,cnxn)

 df = df.set_index('AGR_NAME') res = df.div(df.sum(axis=1), axis=0)

 pandas.options.display.float_format = '{:.2f}%'.format

 print(res.reset_index())

Есть идеи?

...