Pandas Timedelta Unitchoices TypingPython

Python-Programme
Anonymous
 Pandas Timedelta Unitchoices Typing

Post by Anonymous »

Ich schreibe einen Python -Code mit TypenHints und myPy, um sie zu überprüfen. Ich habe einen variablen Zeitraum , den ich angegeben habe, sei eine Zeichenfolge. Ich benutze diese Variable später, um ein Pandas.Timedelta -Objekt zu instanziieren und die Einheiten auf Periode einzustellen. Hier ist ein minimal reproduzierbares Beispiel: < /p>

Code: Select all

import pandas as pd

period: str = "minute"
my_timedelta = pd.Timedelta( 30, unit=period)

print(my_timedelta)
< /code>
Der obige Code läuft gut und erstellt ein Timedelta-Objekt von 30 Minuten: < /p>
$ python example.py
0 days 00:30:00
$
Wenn ich mypy im obigen Code ausführe, erhalte ich den folgenden Fehler:

Code: Select all

(pdmkt) dino@DINO(24):~/code/pdmkt$ mypy example.py
example.py:5: error: Argument "unit" to "Timedelta" has incompatible type "str"; expected "Literal['W', 'w', 'D', 'd', 'days', 'day', 'hours', 'hour', 'hr', 'h', 'm', 'minute', 'min', 'minutes', 's', 'seconds', 'sec', 'second', 'ms', 'milliseconds', 'millisecond', 'milli', 'millis', 'us', 'microseconds', 'microsecond', 'µs', 'micro', 'micros', 'ns', 'nanoseconds', 'nano', 'nanos', 'nanosecond']"  [arg-type]
Found 1 error in 1 file (checked 1 source file)
< /code>

Natürlich könnte ich einen Typ mithilfe des Literales deklarieren und meinen Code so ändernimport pandas as pd
import typing

PERIOD_TYPE = typing.Literal['W', 'w', 'D', 'd', 'days', 'day', 'hours', 'hour', 'hr', 'h', 'm', 'minute', 'min', 'minutes', 's', 'seconds', 'sec', 'second', 'ms', 'milliseconds', 'millisecond', 'milli', 'millis', 'us', 'microseconds', 'microsecond', 'µs', 'micro', 'micros', 'ns', 'nanoseconds', 'nano', 'nanos', 'nanosecond']

period: PERIOD_TYPE = "minute"
my_timedelta = pd.Timedelta( 30, unit=period)

print(my_timedelta)
Der obige Code funktioniert genauso wie der erste, und MyPy berichtet: "Erfolg: Keine Probleme in 1 Quelldatei"
, anstatt meinen eigenen Typ zu deklarieren, ist es für mich Sinn, den Typ aus Pandas irgendwie importieren. Ich habe den Pandas-Code durchgesehen und diese Datei gefunden:
https://github.com/pandas-dev/pandas/bl ... edeltas.py
die die Zeile:
from pandas._libs.tslibs.timedeltas import UnitChoices

In Timedeltas.py Der variable Einheit ist vom Typ Unitchoices , also offensichtlich Unitchoices der Typ, den ich verwenden möchte. Pandas? < /Em> < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post