2017-08-11 1 views
0
BK = pd.DataFrame([], columns=(['Datetime','X','Y','Z'])) 

Time = 08082012 
A1 = 28.455 
B1 = 14.675 
C1 = 124.674 

# Assign first four values under 'Datetime','X','Y','Z' 
# Assign next values in a row under the first values 

Time = 09082012 
A1 = 28.923 
B1 = 14.122 
C1 = 123.158 

# Assign next values in a row under the second values 
Time = 10082012 
A1 = 27.923 
B1 = 15.122 
C1 = 127.158 

Nehmen wir an, dass die Anzahl der Zeilen unendlich sein kann. Wie würde man die Variablen Zeile für Zeile in einen Datenrahmen einordnen? Kann es Anomalien geben, wenn ich die Variablen immer wieder überschreibe?Wie kann man einer Variablenzeile (Pandas) fortlaufend eine Variable zuweisen?

Antwort

0
BK = pd.DataFrame([], columns=(['Datetime','X','Y','Z'])) 
rows = [[Time],[A1],[B1],[C1]] 
BK.loc[len(BK)] = rows 

=

BK.loc[len(BK)]= [[Time],[A1],[B1],[C1]] 

Leicht und schnell, besonders wenn man eine Schleife benutzen würde von einigen Arten.

+0

Sind Sie sicher? Meiner Meinung nach, wenn erstellt Liste und dann Dataframe Konstruktor ist, ist schneller. Kannst du etwas Zeit dafür hinzufügen? – jezrael

+0

Hallo jazrael, du musst das Datenframe nur einmal am Anfang oder so erstellen und danach fügt es die Variablen zur Zeile hinzu. Während ich diesen Kommentar schreibe, könnte es auch die Möglichkeit geben, die Daten direkt an den Datenrahmen zu leiten. Ich muss das herausfinden. – Bondeaux

+0

Ich denke nur, dass die beste Lösung ist, Liste und dann Datenrahmen zu erstellen, weil es schnell, einfach und empfohlen ist (wie sagt Dov Grobgeld in seiner Antwort). Ich bin überrascht, dass Sie denken, dass die Erstellung von Zeilen-zu-Zeile-Daten zu Dataframe schnell ist - meiner Meinung nach nicht. Oder etwas fehlt? – jezrael

0

Ich denke, das Beste ist, verschachtelte Liste erstellen (oder eine Liste von Tupeln) und dann zu DataFrame Konstruktor zuweisen:

#one possible solution for create nested list, try modify for real data 
L = [x for x in function_generate_rows()] 

#another possible solution 
L = [] 
for x in range(5): 
    row = function_generate_rows(x) 
    L.append(row) 

print (L) 
[[08082012,28.455,14.675,124.674],[09082012,28.923,14.122,123.158], ...] 

df = pd.DataFrame(L, columns = ['Datetime','X','Y','Z']) 
0

Im Folgenden auch funktioniert, aber es ist wahrscheinlich langsamer als zunächst eine Liste und am Ende der Schaffung es in einen Datenrahmen drehen (was ich in der Regel):

import pandas as pd 

BK = pd.DataFrame([], columns=(['Datetime','X','Y','Z'])) 

Time = 8082012 
A1 = 28.455 
B1 = 14.675 
C1 = 124.674 

BK=BK.append({'Datetime':Time,'X':A1,'Y':B1,'Z':C1}, ignore_index=True) 
# Assign first four values under 'Datetime','X','Y','Z' 
# Assign next values in a row under the first values 

Time = 9082012 
A1 = 28.923 
B1 = 14.122 
C1 = 123.158 
BK=BK.append({'Datetime':Time,'X':A1,'Y':B1,'Z':C1}, ignore_index=True) 

# Assign next values in a row under the second values 
Time = 10082012 
A1 = 27.923 
B1 = 15.122 
C1 = 127.158 
BK=BK.append({'Datetime':Time,'X':A1,'Y':B1,'Z':C1}, ignore_index=True) 

print BK 
Verwandte Themen