Comment puis-je charger efficacement des données sur des questions Stack Overflow à l'aide de pandas read_clipboard?
Je remarque que beaucoup de questions de pandas sur Stack Overflow n'incluent que quelques lignes de leurs données sous forme de texte, sans le code d'accompagnement pour le générer / le reproduire. Je suis conscient de l'existence de read_clipboardmais je suis incapable de comprendre comment appeler efficacement cette fonction pour lire des données dans de nombreuses situations, par exemple lorsqu'il y a des espaces blancs dans les noms d'en-tête ou des objets Python tels que des listes dans les colonnes.
Comment puis-je utiliser pd.read_clipboard
plus efficacement pour lire des données collées dans des formats non conventionnels qui ne se prêtent pas à une lecture facile en utilisant les arguments par défaut? Y a-t-il des situations où il n'y a rien read_clipboard
?
Réponses
read_clipboard: Guide du débutant
read_clipboardest vraiment une grâce salvatrice pour tous ceux qui commencent à répondre aux questions du tag pandas . Malheureusement, les vétérans des pandas savent également que les données fournies dans les questions ne sont pas toujours faciles à intégrer dans un terminal en raison de diverses complications dans le format des données publiées.
Heureusement, il read_clipboard
a des arguments qui rendent la gestion de la plupart de ces cas possible (et facile). Voici quelques cas d'utilisation courants et leurs arguments correspondants.
Cas d'utilisation courants
read_clipboard
utilise read_csv
sous le capot avec un séparateur d'espaces, donc de nombreuses techniques d'analyse des données à partir de CSV s'appliquent ici, telles que
analyse des colonnes avec des espaces dans les données
utiliser
sep
avec l'argument regex. Tout d'abord, assurez-vous qu'il y a au moins deux espaces entre les colonnes et au plus un espace blanc consécutif à l'intérieur des données de la colonne elle-même. Ensuite, vous pouvez utilisersep=r'\s{2,}'
ce qui signifie «colonnes séparées en recherchant au moins deux espaces blancs consécutifs pour le séparateur» (note:engine='python'
est requis pour les séparateurs multichar ou regex):df = pd.read_clipboard(..., sep=r'\s{2,}', engine='python')
Consultez également Comment gérer les noms de colonnes contenant des espaces lorsque vous utilisez pd.read_clipboard? .
lire une série au lieu de DataFrame
utiliser
squeeze=true
, vous en auriez probablement également besoinheader=None
si la première ligne contient également des données.s = pd.read_clipboard(..., header=None, squeeze=True)
Voir aussi Pourrait-il y avoir un moyen plus simple d'utiliser pandas read_clipboard pour lire une série? .
chargement de données avec des noms d'en-tête personnalisés
utiliser
names=[...]
en conjonction avecheader=None
etskiprows=[0]
pour ignorer les en-têtes existants.df = pd.read_clipboard(..., header=None, names=['a', 'b', 'c'], skiprows=[0])
chargement de données sans en-tête
- utilisation
header=None
- utilisation
définir une ou plusieurs colonnes comme index
- utiliser
index_col=[...]
avec l'étiquette ou l'index approprié
- utiliser
analyse des dates
- utiliser
parse_dates
avec le format approprié. En cas d'analysedatetimes
(c'est-à-dire des colonnes dont la date est séparée par horodatage), vous devrez probablement également l'utilisersep=r'\s{2,}'
tout en vous assurant que vos colonnes sont séparées par au moins deux espaces.
- utiliser
Voir cette réponse de moi pour une liste plus complète des read_csv
arguments pour d'autres cas non couverts ici ...
Mises en garde
read_clipboard
est un couteau suisse. Cependant, il
ne peut pas lire les données dans les formats prettytable / tabulate (IOW, les bordures le rendent plus difficile)
- Voir Lecture dans une trame de données joliment imprimée / formatée à l'aide de pd.read_clipboard? pour trouver des solutions pour y remédier.
ne peut pas analyser correctement les MultIndex à moins que tous les éléments de l'index ne soient spécifiés.
- Voir Copie de dataframes MultiIndex avec pd.read_clipboard? pour trouver des solutions pour y remédier.
ne peut pas ignorer / gérer les ellipses dans les données
- ma méthode suggérée est de supprimer manuellement les ellipses avant l'impression
ne peut pas analyser les colonnes de listes (ou d'autres objets) comme autre chose qu'une chaîne. Les colonnes devront être converties séparément, comme indiqué dans Comment lisez-vous dans un dataframe avec des listes en utilisant pd.read_clipboard? .
ne peut pas lire le texte des images (veuillez donc ne pas utiliser d'images comme moyen de partager vos données avec des gens, s'il vous plaît!)
La seule faiblesse de cette fonction est qu'elle ne capture pas le contenu CTRL + C
si la copie est effectuée à partir d'un PDF
fichier. Le tester de cette façon entraîne une lecture vide.
Mais en utilisant un éditeur de texte standard, cela se passe très bien. Voici un exemple utilisant du texte saisi au hasard:
>>> pd.read_clipboard()
Empty DataFrame
Columns: [sfsesfsdsxcvfsdf]
Index: []