2017-01-02 109 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=np.dot(df,p_value) 

你可以做

df=df.dot(p_value) 

此外,因爲p_value是一個純粹的numpy的陣列,也沒有列名,你在這兒可以使用現有的列名創建一個DF :

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

或者只是直接覆蓋列名直到船尾呃計算點積,像這樣:

df.columns = ['FABL', 'HINOON']