2017-11-14 4 views
1

Ich versuche, eine neue Zeile zu einem Pandas-Datenrahmen dynamisch hinzuzufügen. Der Index ist ein Zeitstempel und ich kann nicht herausfinden, wie man eine neue Zeile einfügt, ohne den Index durcheinander zu bringen. Der erste Teil des Codes erzeugt den Datenrahmen:Hinzufügen von Zeile zu Dataframe mit Zeitstempelindex

data = {'time_stamp': ['2014-05-01 18:47:05.069', '2014-05-01 18:47:05.119', '2014-05-02 18:47:05.230',], 
     'col_a': [34, 25, 26], 
     'col_b' : [21,32,43]} 
df = pd.DataFrame(data, columns = ['time_stamp', 'col_a', 'col_b']) 
df['time_stamp'] = pd.to_datetime(df['time_stamp'], format="%Y-%m-%d %H:%M:%S.%f") 
df.index = df['time_stamp'] # Make time_stamp the index 
del df['time_stamp']  # Drop the initial time_stamp column 
print df 

Ergebnis:

       col_a col_b 
time_stamp       
2014-05-01 18:47:05.069  34  21 
2014-05-01 18:47:05.119  25  32 
2014-05-02 18:47:05.230  26  43 

Der Versuch, eine Reihe mit concat (gleiche Problem mit append) hinzuzufügen:

#Insert new row (corresponding to an incoming update message with a time stamp an a new value on col_a 
ts = pd.to_datetime("2014-05-04 18:47:05.487", format="%Y-%m-%d %H:%M:%S.%f") 
new_row = pd.DataFrame([[11]], columns = ["col_a"]) 
df = pd.concat([df, pd.DataFrame(new_row)], ignore_index=False) 
print df 

Ergebnis:

      col_a col_b 
2014-05-01 18:47:05.069000  34 21.0 
2014-05-01 18:47:05.119000  25 32.0 
2014-05-02 18:47:05.230000  26 43.0 
0        11 NaN 

Wenn ich erweitern "new_row "Mit einer Spalte namens" time_frame "und einem entsprechenden Zeitstempel wird eine neue Spalte namens" time_stamp "erstellt, anstatt einen neuen Wert in die Indexspalte einzufügen.

      col_a col_b    time_stamp 
2014-05-01 18:47:05.069000  34 21.0      NaT 
2014-05-01 18:47:05.119000  25 32.0      NaT 
2014-05-02 18:47:05.230000  26 43.0      NaT 
0        11 NaN 2014-05-04 18:47:05.487 

Alle Ideen würden sehr geschätzt werden.

Antwort

0

Versuchen wir es mit dem Parameter index im Konstrukt pd.DataFrame.

ts = pd.to_datetime("2014-05-04 18:47:05.487", format="%Y-%m-%d %H:%M:%S.%f") 
new_row = pd.DataFrame([[11]], columns = ["col_a"], index=[ts]) 
df1 = pd.concat([df, pd.DataFrame(new_row)], ignore_index=False) 
print(df1) 

Ausgang:

     col_a col_b 
2014-05-01 18:47:05.069  34 21.0 
2014-05-01 18:47:05.119  25 32.0 
2014-05-02 18:47:05.230  26 43.0 
2014-05-04 18:47:05.487  11 NaN 
+0

Schöne - vielen Dank! Ich habe versucht "index = ts", aber offensichtlich nicht sorgfältig genug gelesen, um zu sehen, dass der Index als Liste bestanden werden sollte: [ts] – Pman70

+0

@ Pman70 Ja. Wenn diese Antwort Ihnen helfen würde, würden Sie [akzeptieren] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work?answertab=votes#tab-top) etwas dagegen haben. Ich würde es begrüßen! Glückliche Kodierung! –

+1

Akzeptiert! Ich bin ein kompletter Neuling in diesem Forum, also bin ich nicht in der üblichen Praxis. Ich schätze besonders, dass Sie die Lösung direkt in mein Beispiel eingefügt haben. – Pman70

Verwandte Themen