У меня следующая проблема.Я создаю автономный инструмент 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())
Есть идеи?