2017-09-19 2 views
0

Ich habe meine Anforderungen auf 5 Spalten und 3 Zeilen für eine einfache Erklärung beschränkt. Meine Spaltenüberschrift wird zu string und meine Zeilen kommen zu einer Zeichenkette. Ich möchte, dass alle Zeilen zu einem Datenrahmen hinzugefügt werden. Hier ist, was ich versucht habe,Erstellen eines Pandas Datenrahmens aus einer unbekannten Anzahl von Spaltenlisten

import pandas as pd 

Column_Header = "Col1,Col2,Col3,Col4,Col5" # We have upto 500 columns 
df = pd.DataFrame(columns=Column_Header.split(",")) 


#we will get upto 100000 rows from a server response 
Row1 = "Val11,Val12,Val13,Val14,Val15" 
Row2 = "Val21,Val22,Val23,Val124,Val25" 
Row3 = "Val31,Val32,Val33,Val34,Val35" 
df_temp = pd.DataFrame(data = Row1.split(",") , columns = Column_Header.split(",")) 
pd.concat(df,df_temp) 
print(pd) 
+0

Jedes Mal, wenn ein empfangenes Row, füge es hinzu: 'df.loc [-1] = Row.split (", ")', dann passe den Index an: 'df.index = df.index + 1' – Ian

+0

Wenn deine Frage beantwortet wurde, bitte [ akzeptiere eine Antwort] (https://stackoverflow.com/help/someone-answers). –

Antwort

1

Die beste und schnellste ist erstellen Liste aller Daten, die von list comprehension und rufen DataFrame Konstruktor nur einmal:

Column_Header = "Col1,Col2,Col3,Col4,Col5" 
Row1 = "Val11,Val12,Val13,Val14,Val15" 
Row2 = "Val21,Val22,Val23,Val124,Val25" 
Row3 = "Val31,Val32,Val33,Val34,Val35" 

rows = [Row1,Row2,Row3] 
L = [x.split(',') for x in rows] 

print (L) 
[['Val11', 'Val12', 'Val13', 'Val14', 'Val15'], 
['Val21', 'Val22', 'Val23', 'Val124', 'Val25'], 
['Val31', 'Val32', 'Val33', 'Val34', 'Val35']] 


df = pd.DataFrame(data = L , columns = Column_Header.split(",")) 
print (df) 
    Col1 Col2 Col3 Col4 Col5 
0 Val11 Val12 Val13 Val14 Val15 
1 Val21 Val22 Val23 Val124 Val25 
2 Val31 Val32 Val33 Val34 Val35 
1

Wenn dies ein gangbarer Weg ist, wäre es einfacher, um alle Daten zu pd.read_csv zu verlassen. Konvertieren Sie alle Ihre Zeichenfolgen in eine einzelne mehrzeilige Zeichenfolge, und übergeben Sie sie durch StringIO Puffer an read_csv.

import io  
data = '\n'.join([Column_Header, Row1, Row2, Row3]) 
df = pd.read_csv(io.StringIO(data)) 
df 

    Col1 Col2 Col3 Col4 Col5 
0 Val11 Val12 Val13 Val14 Val15 
1 Val21 Val22 Val23 Val124 Val25 
2 Val31 Val32 Val33 Val34 Val35 

Wenn Sie auf Python2.x sind, dann ist das io Modul als cStringIO Modul zur Verfügung, so dass Sie es als importieren müssten:

import cStringIO as io 
Verwandte Themen