web-dev-qa-db-fra.com

Des indices de type pythonique avec des pandas?

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='#')
20
dangom

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
34
Georgy

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.

11
dangom