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?

albus_c
la source

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.

Pietrovismara
la source
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.

Meenakshi Ravisankar
la source
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"])
Sam Perry
la source
26

vous pouvez utiliser ceci

import pandas as pd
dataset=pd.read_csv("filepath.txt",delimiter="\t")
ramakrishnareddy
la source
Comme vous pouvez le voir dans cette réponse, «sep» et «delimeter» sont les mêmes :) stackoverflow.com/a/49533103
Давид Шико
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)
bfree67
la source
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")

Tulsi Kumar
la source
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")
pari
la source
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

Kaustubh J
la source
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)
Mohamed Berrimi
la source