2016-05-20 18 views
1

Ich bin neu in Python und Dataframes. Ich frage mich, ob es einen besseren Weg, um so etwas zu tun:Gibt es eine bessere Möglichkeit, Datenrahmen zu indexieren?

df['Datetime'] = df.index 
df.reset_index(inplace=True, drop=True) 
df['id'] = df.index 
df.index = df['Datetime'] 
df.drop('Datetime', axis=1, inplace=True) 

ich eine ID/Index-Spalte müssen, damit ich es in mathematischen Formeln (sin(2*pi*id) funktioniert besser als sin(2*pi*datetime)).

Gibt es einen einfacheren (Pythonic) Weg, um es zu erzeugen, ohne Spalten umherbewegen zu müssen?

Update:

print(df.index) 
print(df['id']) 

Ausgänge:

DatetimeIndex(['2013-01-03', '2013-01-04', '2013-01-07', '2013-01-08', 
       '2013-01-09', '2013-01-10', '2013-01-11', '2013-01-14', 
       '2013-01-15', '2013-01-16', 
       ... 
       '2014-01-20', '2014-01-21', '2014-01-22', '2014-01-23', 
       '2014-01-24', '2014-01-27', '2014-01-28', '2014-01-29', 
       '2014-01-30', '2014-01-31'], 
       dtype='datetime64[ns]', length=282, freq=None, tz='UTC') 
2013-01-03 00:00:00+00:00  0 
2013-01-04 00:00:00+00:00  1 
2013-01-07 00:00:00+00:00  2 
2013-01-08 00:00:00+00:00  3 
2013-01-09 00:00:00+00:00  4 
2013-01-10 00:00:00+00:00  5 
2013-01-11 00:00:00+00:00  6 
2013-01-14 00:00:00+00:00  7 
+1

Sie brauchen nicht zu 'Tropfen/Set' den Index können Sie den Pass nutzen könnten index als param trotzdem so 'np.sin (2 * pi * df.index)' sollte funktionieren, verwenden Sie auch 'set_Index' und' reset_index (drop = True) 'anstelle dessen, was Sie versuchen zu tun – EdChum

+0

Können Sie zur Verfügung stellen einige Beispiel-Input/Output-Daten für das, was du meinst "benutze es in Mathematik atische Formeln "und wie Sie gerade den Prozess durchführen? Es klingt nicht so, als müssten Sie den Index manipulieren, um dies zu tun, aber es ist ohne ein spezifisches Beispiel nicht klar. – root

+0

@EdChum danke, dass du mir von 'set_Index' erzählst; Ich werde das beim nächsten Mal beachten. –

Antwort

1

Sie könnten pd.DataFrame verwenden, um den gewünschten Datenrahmen neu zu konstruieren.

import numpy as np 
import pandas as pd 

df = pd.DataFrame(index=pd.date_range('2009-1-1', periods=4)) 
df['Datetime'] = df.index 
df.reset_index(inplace=True, drop=True) 
df['id'] = df.index 
df.index = df['Datetime'] 
df.drop('Datetime', axis=1, inplace=True) 

entspricht

df = pd.DataFrame(index=pd.date_range('2009-1-1', periods=4)) 
df = pd.DataFrame({'id': np.arange(len(df))}, index=df.index) 
#    id 
# 2009-01-01 0 
# 2009-01-02 1 
# 2009-01-03 2 
# 2009-01-04 3 

Oder, wie A L points out Sie einfach

df['id'] = np.arange(len(df)) 
+1

danke das ist, was ich am Ende tun 'df ['id'] = np.arange (len (df))' –

+0

Ah ja, das ist noch einfacher. – unutbu

Verwandte Themen