2013-10-23 70 views
1

我有一個(200列x 5000行)數據幀,偶爾它有一個缺失值。 我希望通過將單元格平均值右邊的 和左邊的單元格來填充缺失的值。熊貓:我如何通過平均相鄰值來手動計算缺失值?

例如:

A B C D E 
1 34 54 56 0 78 
2 12 87 78 23 12 
3 78 35 0 72 31 
4 84 25 14 56 0 
5 26 82 13 14 34 

在這個數據幀有三個缺失值:

1) D1 
2) C3 
3) E4 

D1 should be (78 + 56)/2 = 67 
C3 should be (72 + 32)/2 = 55 
E4 should be (26 + 56)/2 = 41 

因此所產生的數據幀應該是:

A B C D E 
1 34 54 56 67 78 
2 12 87 78 23 12 
3 78 35 55 72 31 
4 84 25 14 56 41 
5 26 82 13 14 34 

是否有一個自然在熊貓做這件事的方法?

+1

在這裏看到:http://pandas.pydata.org/pandas-docs/dev/ missing_data.html – Jeff

+1

爲什麼E4 =(26 + 56)/ 2,這是否意味着E4的單元格是A5? – HYRY

回答

2

我認爲新interpolate()方法可以做到這一點,我試圖通過手工做這樣的:

df = pd.DataFrame({"A":[34,12,78,84,26], "B":[54,87,35,25,82], "C":[56,78,0,14,13], "D":[0,23,72,56,14], "E":[78,12,31,0,34]}) 

# get flat array from DataFrame 
a = np.array(df).flatten() 

# get flat array, zeroes replaced with left + right/2 
res = np.where(a == 0, (np.roll(a, 1) + np.roll(a, -1))/2, a) 

# convert back to DataFrame 
df_new = pd.DataFrame(res.reshape(df.shape), columns = df.columns) 

#  A B C D E 
# 0 34 54 56 67 78 
# 1 12 87 78 23 12 
# 2 78 35 53 72 31 
# 3 84 25 14 56 41 
# 4 26 82 13 14 34 
+0

工作完美,謝謝! – user1367204