2017-01-02 2 views
4

python3を使用してデータを計算するためのコードを書きました。コードは以下の通りである:データフレームインデックス

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
def data(symbols): 
    dates = pd.date_range('2016/01/01','2016/12/23') 
    df=pd.DataFrame(index=dates) 
    for symbol in symbols: 
     df_temp=pd.read_csv("/home/furqan/Desktop/Data/{}.csv".format(symbol), 
         index_col='Date',parse_dates=True,usecols=['Date',"Close"], 
         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') 
     df=(df/df.ix[0,: ]) 
    return df 
symbols = ['FABL','HINOON'] 
df=data(symbols) 
print(df) 

p_value=(np.zeros((2,2),dtype="float")) 
p_value[0,0]=0.5 
p_value[1,1]=0.5 
print(df.shape[1]) 
print(p_value.shape[0]) 
df=np.dot(df,p_value) 
print(df.shape[1]) 
print(df.shape[0]) 
print(df) 

私はインデックスが消えた二度目のdfを印刷します。問題は行列の乗算によるものだと私は思う。インデックス作成と列見出しをdfに戻すにはどうすればよいですか?

+0

試し 'df.dot(p_valueの)'何多分起こっては 'np.dot'がちょうど戻ってnumpyの配列ではなく、DF – EdChum

+0

ガットの行のインデックスを返しているということですが、しかし、それぞれFABLとHINOONでなければならない列ラベルは、それぞれ0と1に置き換えられます。 –

+0

これは、p_valueがnumpyの配列であるため、その配列からdfを作成するか、列の名前を渡すか、たとえば、 'df.columns = ['FABL'、 'HINOON']' – EdChum

答えて

1

numpyメソッドを使用しているため、問題を解決するには、通常numpy配列が返されます。そのため、既存の列とインデックスラベルは失われてしまいます。既存の列名を使用してDFを作成することができますので、

ので、代わりに

df=np.dot(df,p_value) 

p_valueは、純粋なnumpyの配列であるので、あなたがさらに

df=df.dot(p_value) 

行うことができますが、ここには列名が存在しません:

p_value=pd.DataFrame(np.zeros((2,2),dtype="float"), columns = df.columns) 

または列名を直接後で上書きするえーそのような内積計算:

df.columns = ['FABL', 'HINOON'] 
関連する問題