Pour améliorer l'efficacité du travail, je voulais créer un tableau croisé dynamique pour le fichier Excel créé par Pandas, activer les filtres et regrouper les dates et heures.
Je n'avais pas beaucoup de matériel en japonais, alors j'aimerais le partager comme référence.
L'URL affichée dans Reference montre la fonction pour créer le tableau croisé dynamique, donc si vous voulez faire plus de choses, vous devriez vous y référer.
Créez des données pour un tableau croisé dynamique sans signification particulière. Modifiez le nom du fichier à exporter sous forme de fichier Excel. Veillez à ce que le nom de fichier spécifié ne se trouve pas dans le même répertoire. Nous ne pouvons pas prendre la responsabilité même s'il est écrasé.
import pandas as pd
import random
from datetime import datetime as dt
record = []
for y in range(2015, 2020):
for m in range(1, 13):
for shop in ['A', 'B', 'C']:
date = dt(year=y, month=m, day=1).strftime('%Y-%m-%d')
price = 200 + random.randint(0,100)
record.append([date, shop, price])
df_record = pd.DataFrame(record)
df_record.columns = ['date', 'shop', 'price']
df_record['date'] = pd.to_datetime(df_record['date'])
df_record.to_excel('Veuillez modifier ici.xlsx', index=None)
Spécifiez le nom de fichier spécifié dans [Créer un exemple de fichier](#Créer un exemple de fichier) comme nom de fichier lu.
import win32com.client as win32
import os
win32c = win32.constants
## win32.Je pourrais le faire avec Dispatch, mais j'ai eu une erreur quand je l'ai transformé en un exe avec pyinstaller, donc
## win32.gencache.Il peut être plus sûr d'utiliser EnsureDispatch
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True
##Si vous ne spécifiez pas le chemin absolu lors de la lecture, une erreur se produira
fpath = os.path.join(os.getcwd(),'Veuillez modifier ici.xlsx')
wb = excel.Workbooks.Open(fpath)
##Spécifiez la feuille 1 et activez le filtre
wbs1 = wb.Sheets('Sheet1')
wbs1.Columns.AutoFilter(1)
##Créer un tableau croisé dynamique
wbs2_name = 'pivot'
wb.Sheets.Add().Name = wbs2_name
wbs2 = wb.Sheets(wbs2_name)
pvt_name = 'pvt'
pc = wb.PivotCaches().Create(SourceType=win32c.xlDatabase, SourceData=wbs1.UsedRange)
pc.CreatePivotTable(TableDestination='{sheet}!R3C1'.format(sheet=wbs2_name), TableName=pvt_name)
##Paramètres du tableau croisé dynamique
wbs2.PivotTables(pvt_name).PivotFields('date').Orientation = win32c.xlRowField
wbs2.PivotTables(pvt_name).AddDataField(wbs2.PivotTables(pvt_name).PivotFields('price'), 'Ave/price', win32c.xlAverage).NumberFormat = '0'
wbs2.PivotTables(pvt_name).PivotFields('price').Orientation = win32c.xlPageField
##Sélectionnez un groupe de dates
## Periods=(Secondes,Minutes,Temps,journée,Mois,trimestre,Année)
wbs2.Cells(4, 1).Select()
excel.Selection.Group(Start=True, End=True, Periods=(False, False, False, False, True, False, True))
##Fermer le fichier
wb.Close(True)
excel.Quit()
How to Create a Pivot Table in Excel with the Python win32com Module