2017-10-02 9 views
0

lire les données de ligne par ligne,Comment lire des données en ligne et le retour d'une trame de données

for line in sys.stdin: 

    print(line) 

la chaque entrée de la ligne suit:

de New York 100
Orlando 200
LA 300
DC 400

la sortie que je veux est une trame de données:

  city  value 
    0 New York 100 
    1 Orlando 200 
    2  LA 300 
    3  D.C. 400 

la façon dont je fais est lu la ligne et enregistrer toutes les lignes comme une liste de la liste, où chaque contenu en ligne est une liste

list_of_lists = [] 
for line in sys.stdin: 
     new_list = [elem for elem in line.split()] 
     list_of_lists.append(new_list) 

puis convertir cette list_of_lists à une trame de données. Je pense que cette façon est assez stupide, donc je me demande s'il y a d'autres moyens. Merci.

+0

Je ne veux pas imprimer chaque ligne t, à la place, je veux le convertir en une base de données – Ansonparkour

+2

Oui, eh bien, qu'est-ce que vous avez essayé exactement? Avez-vous regardé la documentation des pandas pour créer des DataFrames? Quelle est exactement votre question? –

+0

Ajouter à une liste, puis rejoindre par newline et transmettre à StringIO. –

Répondre

2
import sys, re, pandas as pd 

data = sys.stdin.read().splitlines() # obtaining the list of lines from stdin 
data = [re.split(r'\s+(?=\d+$)', l) for l in data] # split each line into 2 items: `city` and `value` 
df = pd.DataFrame(data, columns=['city','value']) # constructing dataframe 

print(df) 

La sortie:

 city value 
0 New York 100 
1 Orlando 200 
2  LA 300 
3  D.C. 400 
0

Utilisez str.rsplit de se séparer de la partie droite et une seule fois

list_of_lists = [] 
for line in sys.stdin: 
     new_list = line.rsplit(1) 
     list_of_lists.append(new_list) 

Ou, mis en une série de pandas géants premier

import sys, re, pandas as pd 

data = sys.stdin.read().splitlines() 

pd.Series(data, name='A').str.rsplit(n=1, expand=True)