Afin de tester certaines fonctionnalités, je voudrais créer un à DataFrame
partir d'une chaîne. Disons que mes données de test ressemblent à:
TESTDATA="""col1;col2;col3
1;4.4;99
2;4.5;200
3;4.7;65
4;3.2;140
"""
Quelle est la manière la plus simple de lire ces données dans un Pandas DataFrame
?
from pandas.compat import StringIO
, notant qu'il s'agit de la même classe que celle fournie avec Python.pd.read_table()
est une fonction équivalente, légèrement meilleure nomenclature:df = pd.read_table(TESTDATA, sep=";")
.pandas.compat.StringIO
. De cette façon, nous n'avons pas besoin d'importerStringIO
séparément. Cependant, lepandas.compat
package est considéré comme privé selon pandas.pydata.org/pandas-docs/stable/api.html?highlight=compat , laissant ainsi la réponse telle quelle pour l'instant.df.to_csv(TESTDATA)
, utilisezTESTDATA.seek(0)
Méthode de partage
la source
df = pd.DataFrame([x.split(';') for x in data.split('\n')[1:]], columns=[x for x in data.split('\n')[0].split(';')])
Une solution rapide et facile pour le travail interactif consiste à copier-coller le texte en chargeant les données depuis le presse-papiers.
Sélectionnez le contenu de la chaîne avec votre souris:
Dans le shell Python, utilisez
read_clipboard()
Utilisez le séparateur approprié:
la source
Cette réponse s'applique lorsqu'une chaîne est entrée manuellement, pas lorsqu'elle est lue quelque part.
Un CSV traditionnel à largeur variable est illisible pour stocker des données sous forme de variable de chaîne. Surtout pour une utilisation à l'intérieur d'un
.py
fichier, pensez plutôt aux données séparées par des tuyaux de largeur fixe. Divers IDE et éditeurs peuvent avoir un plugin pour formater le texte séparé par des tuyaux dans une table soignée.En utilisant
read_csv
Stockez les éléments suivants dans un module utilitaire, par exemple
util/pandas.py
. Un exemple est inclus dans la docstring de la fonction.Alternatives non fonctionnelles
Le code ci-dessous ne fonctionne pas correctement car il ajoute une colonne vide à gauche et à droite.
Quant à
read_fwf
, il n'utilise pas vraiment autant de kwargs optionnels quiread_csv
acceptent et utilisent. En tant que tel, il ne devrait pas être utilisé du tout pour les données séparées par des tuyaux.la source
read_fwf
prend plus d'read_csv
arguments que ce qui est documenté, mais il est vrai que certains n'ont aucun effet .Le moyen le plus simple consiste à l'enregistrer dans un fichier temporaire, puis à le lire:
Bonne façon de créer un fichier temporaire: Comment puis-je créer un fichier tmp en Python?
la source