Prenons une fonction simple qui prend une chaîne et renvoie une trame de données:
import pandas as pd
def csv_to_df(path):
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Quelle est la méthode Pythonique recommandée pour ajouter des indices de type à cette fonction?
Si je demande python pour le type d'un DataFrame, il renvoie pandas.core.frame.DataFrame
. Ce qui suit ne fonctionnera pas, car il me dira que pandas n'est pas défini.
def csv_to_df(path: str) -> pandas.core.frame.DataFrame:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Pourquoi ne pas simplement utiliser pd.DataFrame
?
def csv_to_df(path: str) -> pd.DataFrame:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Le résultat est le même:
> help(csv_to_df)
Help on function csv_to_df in module __main__:
csv_to_df(path:str) -> pandas.core.frame.DataFrame
Je fais actuellement ce qui suit:
from typing import TypeVar
PandasDataFrame = TypeVar('pandas.core.frame.DataFrame')
def csv_to_df(path: str) -> PandasDataFrame:
return pd.read_csv(path, skiprows=1, sep='\t', comment='#')
Qui donne:
> help(csv_to_df)
Help on function csv_to_df in module __main__:
csv_to_df(path:str) -> ~pandas.core.frame.DataFrame
Je ne sais pas à quel point c'est Pythonic, mais je trouve cela assez compréhensible comme indice de type.