Charger des données de txt avec des pandas


159

Je charge un fichier txt contenant un mélange de données flottantes et de chaînes. Je veux les stocker dans un tableau où je peux accéder à chaque élément. Maintenant je fais juste

import pandas as pd

data = pd.read_csv('output_list.txt', header = None)
print data

Ceci est la structure du fichier d'entrée: 1 0 2000.0 70.2836942112 1347.28369421 /file_address.txt.

Désormais, les données sont importées sous forme de colonne unique. Comment puis-je le diviser, afin de stocker différents éléments séparément (afin que je puisse appeler data[i,j])? Et comment puis-je définir un en-tête?

Réponses:


217

Vous pouvez utiliser:

data = pd.read_csv('output_list.txt', sep=" ", header=None)
data.columns = ["a", "b", "c", "etc."]

Ajoutez sep=" "votre code en laissant un espace vide entre les guillemets. Ainsi, les pandas peuvent détecter les espaces entre les valeurs et trier en colonnes. Les colonnes de données servent à nommer vos colonnes.


Merci! Comment puis-je accéder à un élément du tableau?
albus_c

si vous souhaitez appeler une colonne, utilisez data.a si vous avez nommé la colonne "a".
pietrovismara

1
Ou si vous voulez appeler une seule ligne, vous pouvez utiliser data.a [1] (cet exemple appelle la première ligne de la colonne)
pietrovismara

Génial! Cela a tout réglé
albus_c

87

Je voudrais ajouter aux réponses ci-dessus, vous pouvez utiliser directement

df = pd.read_fwf('output_list.txt')

fwf signifie lignes formatées à largeur fixe.


38

La solution de @ Pietrovismara est correcte mais je voudrais juste ajouter: plutôt que d'avoir une ligne séparée pour ajouter des noms de colonnes, il est possible de le faire à partir de pd.read_csv.

df = pd.read_csv('output_list.txt', sep=" ", header=None, names=["a", "b", "c"])


13

Si vous n'avez pas d'index affecté aux données et que vous n'êtes pas sûr de l'espacement, vous pouvez utiliser pour laisser les pandas attribuer un index et rechercher plusieurs espaces.

df = pd.read_csv('filename.txt', delimiter= '\s+', index_col=False)

3
De manière équivalente, vous pouvez spécifier l'argument le plus détaillé delim_whitespace=Trueau lieu du '\s+'délimiteur
ALollz

8

Vous pouvez faire comme:

import pandas as pd
df = pd.read_csv('file_location\filename.txt', delimiter = "\t")

(comme, df = pd.read_csv ('F: \ Desktop \ ds \ text.txt', delimiter = "\ t")


6

Sur la base des dernières modifications apportées aux pandas, vous pouvez utiliser, read_csv, read_table est obsolète:

import pandas as pd
pd.read_csv("file.txt", sep = "\t")

5

Vous pouvez importer le fichier texte à l'aide de la commande read_table comme suit:

import pandas as pd
df=pd.read_table('output_list.txt',header=None)

Le prétraitement devra être effectué après le chargement


1

Je prends habituellement un regard sur les données d' abord ou tout simplement essayer de l' importer et faire data.head (), si vous voyez que les colonnes sont séparées par \ t alors vous devez spécifier sep="\t"autrement, sep = " ".

import pandas as pd     
data = pd.read_csv('data.txt', sep=" ", header=None)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.