2017-11-29 3 views
0

Ich bin neu in Python und arbeite mich durch mein Crawling-Projekt. Ich habe zwei Fragen zu einigen Pandabären.Pandas Indexeinstellung und Importieren von Werten in Spalten

Unten ist meine Datentabelle „js“

   apple  banana 
period  
2017-01-01 100.00000 22.80130 
2017-02-01 94.13681 16.28664 
2017-03-01 85.34201 13.68078 
2017-04-01 65.79804 9.77198 
2017-05-01 43.32247 13.35504 
2017-06-01 72.63843 9.44625 
2017-07-01 78.82736 9.77198 
2017-08-01 84.03908 10.09771 
2017-09-01 90.55374 13.35504 
2017-10-01 86.64495 9.12052 

Unten ist mein Code Apfel und Banane Werte auf neuen Datenrahmen anzuwenden.

Der erste Schritt ist, meinen df-Index als data_range ('2017-01-01' bis gestern (täglich)) zu setzen. Und die Fehlermeldung sagt, dass mir 1 benötigtes Positionsargument fehlt: 'Schlüssel'. Ist es möglich, den Index als Tagesdatum von '2017-01-01' bis gestern festzulegen?

Nachdem das gelöst ist, versuche ich, meine "js" Daten wie "Apfel" und "Banane" als Spalte zu setzen, und jeden Wert in Bezug auf df-Indexdaten zu setzen. Dieses Beispiel zeigt nur 'Apfel' und 'Bananen' Spalten, aber in meinem realen Datensatz habe ich Tausende mehr ...

Bitte lassen Sie mich wissen, die effiziente Möglichkeit, mein Problem zu lösen. Danke im Voraus!

------------------ EDIT ------------------------ Das Datum Indizierung funktioniert perfekt mit @COLDSPEED Antwort.

dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1)) 
df.index = pd.to_datetime(df.index) # ignore if not needed 
df = df.reindex(dd, fill_value=0.0) 

Ein Problem ist, dass, wenn ich einen anderen Datenrahmen „js2“ haben (siehe unten) und diese Daten in einer einzigen df kombinieren (siehe oben) Ich glaube, es wird nicht funktionieren. Irgendwelche Suggestionen?

 kiwi mango 
period  
2017-01-01 9.03614  100.00000 
2017-02-01 5.42168  35.54216 
2017-03-01 7.83132  50.00000 
2017-04-01 10.24096 55.42168 
2017-05-01 10.84337 60.84337 
2017-06-01 12.04819 65.66265 
2017-07-01 17.46987 34.93975 
2017-08-01 9.03614  30.72289 
2017-09-01 9.63855  56.02409 
2017-10-01 12.65060 45.18072 
+0

Sind Ihre Daten zuerst oder zuerst? –

+0

Die Reihenfolge, die Sie oben sehen, ist die Reihenfolge des Datums, die ich brauche. – Kang

Antwort

1

Sie können pd.to_datetime und pd.Timedelta -

idx = pd.date_range('2017-01-01', pd.to_datetime('today') - pd.Timedelta(days=1))  
idx 

DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04', 
       '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08', 
       '2017-01-09', '2017-01-10', 
       ... 
       '2017-11-18', '2017-11-19', '2017-11-20', '2017-11-21', 
       '2017-11-22', '2017-11-23', '2017-11-24', '2017-11-25', 
       '2017-11-26', '2017-11-27'], 
       dtype='datetime64[ns]', length=331, freq='D') 

Diese können Sie dann zu reindex Ihre Datenrahmen verwenden - erste

df.index = pd.to_datetime(df.index) # ignore if not needed 
df = df.reindex(idx, fill_value=0.0) 

Wenn Sie das Datum Tag-first sind (Tag, gefolgt von Monat), stellen Sie sicher, dass Sie angeben, dass, wenn der Index Umwandlung -

df.index = pd.to_datetime(df.index, dayfirst=True) 
+0

@kang 'reindex' macht das automatisch für dich, oder irre ich mich? Wie sieht Ihre aktuelle Ausgabe aus und was benötigen Sie? –

+0

Ihr Code funktioniert perfekt. Die einzige Frage ist, wie füllt Ihr Code den Wert von meinem "js" DataFrame? Ich sehe keine js im code .. @ COLDSPEED Ich stelle diese Frage, denn wenn ich zwei Datensätze mit unterschiedlichen Werten habe, was ist dann mein Schritt, um diese beiden DataFrame mit df zu kombinieren? – Kang

+0

Ich bearbeite meine Frage oben mit Ihrem Code. Bitte werfen Sie einen Blick und lassen Sie mich den nächsten Schritt wissen. @COLDSPEED – Kang

Verwandte Themen