2016-09-23 47 views
0

在一些數據上,我計算意味着列式。Python熊貓:重用存儲意味着要正確替換nan

比方說數據看起來像這樣

A B C ... Z 
0.1 0.2 0.15 ... 0.17 
. . .  . 
. . .  . 
. . .  . 

我用數據框的平均值()函數,併爲結果我

A some_mean_A 
B some_mean_B 
... 
Z some_mean_Z 

對於更換的NaN,我用fillna()。它適用於計算均值並在同一執行過程中使用它的情況。

但是,只要我將文件保存在一個文件中並閱讀它以便在不同的.py文件中使用它,我就會變成垃圾。原因是手段文件解釋不正確。在新的數據集中,列A的每個NaN應該被some_mean_A替換。同爲B和休息,直到Z.但是,這是不會發生的,因爲通過讀取read_csv)的手段(我得到以下

0 1 
A some_mean_A 
B some_mean_B 
... 
Z some_mean_Z 

當我使用這個與fillna(),我沒有得到預期結果。

所以,我希望你能理解我的問題。你知道如何解決這個問題嗎?

編輯1.0:

我這是怎麼計算和存儲手段:

df_mean = df.mean() 
df.fillna(df_mean, inplace=True) // df is the dataframe for dataset where it works 
df_mean.to_csv('mean.csv') 

這是我讀的手段:

df_mean = pd.read_csv('mean.csv', header=None) 
+1

您可以包括你如何保存和加載手段載體?這可能是一個索引問題。 – ayhan

+0

我加了均值向量的保存和讀數。 – tumbler

回答

2

df.mean()返回一個系列。在該系列中,值是列的手段,索引是列名。這是一個一維結構。但是,如果您使用pd.read_csv的默認參數讀取該文件,它將以DataFrame的形式讀取它:列名稱爲一列,方法爲另一列。要獲得相同的數據結構,您需要指定索引並通過squeeze=True。這樣,大熊貓會將它讀成一個系列:

df_mean = pd.read_csv('mean.csv', header=None, index_col=0, squeeze=True) 

會給你同樣的系列的平均向量。您可以在年底擺脫了指數的名稱添加rename_axis(None)(我認爲這需要大熊貓0.18.0):

df_mean = pd.read_csv('mean.csv', header=None, index_col=0).squeeze().rename_axis(None) 
+0

擠幹什麼? – tumbler

+0

@ umble It它將一列DataFrame轉換爲一個Series。這不是強制性的。您也可以通過選擇單個列來處理DataFrame,但這會爲您提供與您在開始時相同的數據結構。 – ayhan

+0

因此,在第一列應該被解釋爲索引之後,擠壓只適用於這裏的一個一維DataFrame? – tumbler