[PYTHON] Mémorandum (acquisition / conversion du temps "défini par l'utilisateur", tabulation croisée)

introduction

Depuis la première étape de la conception du concept, "traiter les données brutes en" intégrant le temps de travail si les valeurs autres que le nom du salarié et le temps de travail sont les mêmes "" a été implémentée, nous allons le résumer. https://qiita.com/wellwell3176/items/7dba981b479c5933bf5f image.png Figure: Extrait de données brutes Comme le nom de l'employé n'est pas nécessaire en tant que données, je souhaite supprimer le nom de l'employé et additionner le temps de travail si toutes les informations autres que le nom de l'employé sont identiques.

Programme terminé

program


import pandas as pd
df=pd.read_excel('/content/drive/My Drive/Colab Notebooks/data2.xlsx')

df["Classification"]=df["Classification"]+df["Entreprise"] #後工程で必要なのでClassificationとEntrepriseは一括表示にする
df=df.rename(columns = {'Classification':'業務Classification'} #Changer également l'en-tête de ligne

df["Heures d'ouverture"] = pd.to_datetime(df["Heures d'ouverture"],format="%H:%M:%S") 
 #Étant donné que le temps de travail a été entré en tant que données brutes par la définition de l'utilisateur Excel, convertir de la chaîne de caractères en datetime en spécifiant le format
df["Heures d'ouverture"] = df["Heures d'ouverture"].dt.minute
 #Les chiffres sont[~~ minutes][~~ Heure]Puisqu'il y a une demande d'affichage avec, définissez la date[Minutes]Convertir en type int

df2=df.groupby(["thème","temps","Nom du pays","Division des affaires"],as_index=False).sum()
 #Agréger par autre que le nom de l'employé. df.Notez que le résultat de groupby ne sera pas enregistré à moins qu'il ne soit attribué.
df2.to_excel('/content/drive/My Drive/Colab Notebooks/data5.xlsx')

image.png Figure: Résultat de sortie du programme C'est OK car la combinaison de chaînes de caractères de la division commerciale, la suppression du nom de l'employé et l'agrégation du temps sont réalisées.

Erreurs et pannes survenues pendant le programme "et son aperçu

** 1. Impossible de convertir la chaîne de caractères en heure avec to_datetime **

python


df["Heures d'ouverture"] = pd.to_datetime(df["Heures d'ouverture"]) 

-->TypeError: <class 'datetime.time> is not convertible to datetime
#Un problème est survenu avec le "format d'affichage" d'Excel. "Hh" défini par l'utilisateur:mm "est utilisé et la valeur par défaut est_Je ne pouvais pas lire ceci à datetime
#Résolu en utilisant l'option format et en spécifiant la méthode de description de la colonne correspondante
df["Heures d'ouverture"] = pd.to_datetime(df["Heures d'ouverture"],format="%H:%M:%S") #C'est acceptable

** 2. Les heures de travail ne sont pas agrégées par groupe par **

Version échouée


df["Heures d'ouverture"] = pd.to_datetime(df["Heures d'ouverture"],format="%H:%M:%S") 
 
df.groupby("Nom du pays").mean()
ValueError:Aucun axe nommé thème pour le type d'objet<class 'pandas.core.frame.DataFrame'>

image.png Il s'agissait d'une production comme le montre la figure ci-dessus, et l'agrégation par «temps de travail» n'a pas eu lieu. La cause semble être que le format datetime n'a pas été reconnu comme la valeur agrégée de la fonction groupby. Résolu en changeant datetime en type int comme le produit fini.

Version réussie


df["Heures d'ouverture"] = pd.to_datetime(df["Heures d'ouverture"],format="%H:%M:%S") 
df["Heures d'ouverture"] = df["Heures d'ouverture"].dt.minute 

df.groupby("Nom du pays").mean()

image.png Avec cela, le temps de travail peut être capturé sous la forme de ~~ [minutes] du côté de la tabulation.

3. AttributeError: 'Series' object has no attribute 'minute'

python


df["Heures d'ouverture"] = df["Heures d'ouverture"].minute #J'obtiens une erreur en utilisant ceci

--> AttributeError: 'Series' object has no attribute 'minute'
#.Puisque dt manquait, df["Heures d'ouverture"]Impossible de traiter une série de tableaux

df["Heures d'ouverture"] = df["Heures d'ouverture"].dt.minute #C'est la bonne réponse

4. ValueError: No axis named HOGE for object type class'pandas.core.frame.DataFrame'

python


df.groupby("Nom du pays","thème").sum() #J'obtiens une erreur en utilisant ceci

-->ValueError:Aucun axe nommé thème pour le type d'objet<class 'pandas.core.frame.DataFrame>
#Une erreur de description lors de l'utilisation de plusieurs index dans la fonction groupby.[]Cela ne suffisait pas.

df.groupby(["thème","Nom du pays"]).sum() #C'est acceptable

Pages / sites référencés

Le nom de la colonne ne peut pas être modifié avec rename () https://teratail.com/questions/291634 Comment utiliser le groupe Pandas par https://qiita.com/propella/items/a9a32b878c77222630ae Comment convertir une date en utilisant Series.dt () dans Pandas https://qiita.com/Takemura-T/items/79b16313e45576bb6492

Recommended Posts

Mémorandum (acquisition / conversion du temps "défini par l'utilisateur", tabulation croisée)
Conversion des données de temps en notation 25 heures
Acquisition de données chronologiques (quotidiennes) des cours des actions
mesure du temps