[PYTHON] Comme la date Excel lue par pandas.read_excel était une valeur de série, elle a été convertie en datetime.datetime.

Koto no Hottan

Lorsque j'ai lu une date Excel avec pandas.read_excel, les données sont devenues un numéro de série en raison du formatage. J'ai décidé de le convertir car je souhaite le traiter uniformément avec datetime.datetime.

Comment convertir la valeur de série ʻint` en datetime.datetime

--Référence

# date_int :Valeur série
if date_int < 60:
    # 1900-03-Avant 01
    days = date_int -1
else:
    # 1900-03-Pour 01 ou plus tard
    days = date_int - 2
date_time = pandas.to_datetime('1900/01/01') + datetime.timedelta(days=days)

Je l'ai essayé comme ça

--Environnement --macOS Catalina version 10.15.7 --Microsoft Excel pour Mac version 16.42 - Python 3.8.5 - pandas 1.1.3 --Référence

Le fichier Excel à lire ressemble à ceci スクリーンショット 2020-10-14 22.48.11.png

import datetime
import pandas


def get_datetime(val: object) -> datetime.datetime:
    """Obtenez la date.
    :param val:La valeur d'origine de la date
    :return:Date si date ou numéro de série, Aucun autrement
    """
    val_type = type(val)
    # datetime.S'il s'agit de datetime, renvoyez-le tel quel
    if val_type is datetime.datetime:
        return val
    # pandas.L'horodatage est datetime.Il hérite de datetime et datetime.Il semble qu'il puisse être traité en tant que datetime, alors renvoyez-le tel quel
    if issubclass(val_type, datetime.datetime):
        return val
    #S'il est int, datetime comme valeur série.Convertir en datetime et retourner
    if val_type is int:
        if val < 60:
            # 1900-03-Avant 01
            days = val -1
        else:
            # 1900-03-Pour 01 ou plus tard
            days = val - 2
        return pandas.to_datetime('1900/01/01') + datetime.timedelta(days=days)
    return None


if __name__ == '__main__':
    #Charger Excel avec des pandas
    sheet = pandas.read_excel('Book.xlsx', sheet_name='Sheet1', header=None)
    for index, row in sheet.iterrows():
        date = get_datetime(row[0])
        if date is not None:
            print(date.strftime('%Y/%m/%d'))

production


2020/10/14
2020/10/15
2020/10/16
2020/10/17

Recommended Posts

Comme la date Excel lue par pandas.read_excel était une valeur de série, elle a été convertie en datetime.datetime.
Comment lire les fichiers de numéros de série en boucle, les traiter et les représenter graphiquement
C'était une vie que je voulais faire de l'OCR sur AWS Lambda pour localiser les personnages.
Depuis qu'il y avait Doppelgenger, j'ai essayé de le distinguer avec l'intelligence artificielle (rires) (Partie 2)
[python] Remplacez le nom du fichier image par un numéro de série
J'ai réussi à convertir jpg en png car la transparence n'a pas été altérée
J'ai exécuté GhostScript avec python, divisé le PDF en pages et l'ai converti en image JPEG.
Lorsque j'ai essayé d'exécuter Python, j'ai été ignoré dans le Microsoft Store
[Django] a créé un champ pour saisir des dates avec des nombres à 4 chiffres
[Bash] Commande pour écrire des fichiers ligne par ligne dans un fichier de numéro de série [Une ligne (?)]
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
Je souhaite lire le CSV ligne par ligne lors de la conversion du type de champ (tout en affichant la barre de progression) et le traiter.
Dans IPython, quand j'ai essayé de voir la valeur, c'était un générateur, donc je l'ai inventé quand j'étais frustré.
Je voulais connaître le nombre de lignes dans plusieurs fichiers et j'ai essayé de l'obtenir avec une commande
Le fichier édité avec vim était en lecture seule, mais je veux le sauvegarder
P100-PCIE-16GB a été ajouté au GPU de Google Colab avant que je le sache
J'ai essayé de récupérer les données de l'ordinateur portable en le démarrant sur Ubuntu
Notez que j'étais accro à la configuration de TensowFlow
Cela fait un an que j'ai rejoint le département de développement d'applications Web, alors je regarde en arrière