2017-09-24 8 views
0

Um einen Algorithmus zu erstellen, möchte ich das Python-Skript so arbeiten lassen, dass es die Funktion read_csv von Panda nicht immer wieder verwenden muss.Erstellen von Teilmengen von DataFrame

Folgendes ist der Code, den ich verwende.

start_date = '2016-06-01' 
end_date = '2017-09-22' 

#Pool of symbols that I want to use 
usesymbols = ['GLAXO', 'AVN'] 

#Function to build a dataframe 
def data(symbols): 
    dates=pd.date_range(start_date,end_date) 
    df=pd.DataFrame(index=dates) 
    for symbol in symbols: 
     df_temp=pd.read_csv('/home/furqan/Desktop/python_data/{}.csv'.format(str(symbol)),usecols=['Date','Close'], 
          parse_dates=True,index_col='Date',na_values=['nan']) 
     df_temp = df_temp.rename(columns={'Close': symbol}) 
     df=df.join(df_temp) 
     df=df.fillna(method='ffill') 
     df=df.fillna(method='bfill') 
    return df 

#Function to build powerset from list of "usesymbols" 
def powerset(iterable): 
    s = list(iterable) 
    return chain.from_iterable(combinations(s, r) for r in range(1, len(s)+1)) 

power_set = list(powerset(usesymbols)) 
dataframe = data(usesymbols) 
print(dataframe) 
for j in range(0, len(power_set)): 

Mit usesymbols ersten gernerated ich eine Potenzmenge, die wie sieht wie folgt aus:

[('GLAXO',), ('AVN',), ('GLAXO', 'AVN')] 

dann ich einen Datenrahmen geschaffen, die wie folgt aussieht wie folgt:

   GLAXO AVN 
2016-06-01 205.93 31.42 
2016-06-02 206.22 32.62 
2016-06-03 207.86 31.65 
2016-06-04 207.86 31.65 
2016-06-05 207.86 31.65 

Danach habe ich hinzugefügt eine Schleife, unter dieser Schleife möchte ich einen temporären Datenrahmen so erstellen, dass, wenn j = 0, dieser temporäre Datenrahmen sollte aus 1 Spalte nämlich GLAXO bestehen, dann wenn j = 1 sollte es aus einer Spalte bestehen AVN 'und schließlich, wenn j = 3, sollte es sowohl die Spalten "AVN" als auch "GLAXO" umfassen.

Ich habe Schwierigkeiten, diesen temporären Datenrahmen zu machen. Die zweite Option besteht darin, die Datenfunktion zu verwenden, aber das würde jedes Mal die Funktion pandas read_csv verwenden.

Antwort

1
powerset = [('GLAXO'), ('AVN'), ('GLAXO', 'AVN')] 
j = 1 
print(df.loc[:,powerset[j]]) 

2016-06-01 31.42 
2016-06-02 32.62 
2016-06-03 31.65 
2016-06-04 31.65 
2016-06-05 31.65 
Name: AVN, dtype: float64 

j=2 
print(df.loc[:,powerset[j]]) 

GLAXO AVN 
2016-06-01 205.93 31.42 
2016-06-02 206.22 32.62 
2016-06-03 207.86 31.65 
2016-06-04 207.86 31.65 
2016-06-05 207.86 31.65 
+0

Perfekte Lösung. –

Verwandte Themen