2016-05-10 95 views
0

我試圖找到兩列中值的平均值。在列表中查找行數值的平均值

輸入:

tweetcricscore 34 #afgvssco 51 
tweetcricscore 23 #afgvszim 46 
tweetcricscore 24 #banvsire 12 
tweetcricscore 456 #banvsned 46 
tweetcricscore 653 #canvsnk 1 
tweetcricscore 789 #cricket 178 
tweetcricscore 625 #engvswi 46 
tweetcricscore 86 #hkvssco 23 
tweetcricscore 3 #indvsban 1 
tweetcricscore 87 #sausvsvic 8 
tweetcricscore 98 #wt20  56 

我試圖找到col[1]col[3]水平的平均值。即

34 + 51/2 = 42.5 

代碼:

data = np.genfromtxt('keyword.csv', delimiter=',', comments=None) 

d0=data[:,1] 
d1=data[;,3] 

,寫在同一輸入文件中col[4]輸出d2

我可以找到許多垂直平均值計算的樣本,但無法找到水平。該數組不會被排序,因爲這兩個值相對於col[0]col[2].彼此相關。任何建議表示讚賞。

在此先感謝。

+0

你總是會有兩個靜態的列,你期待的平均水平?或者,那麼會有多少個列是動態的? – PyNoob

+0

@pyNoob截至目前只有2列。不能保證未來。 –

回答

3

您可以輕鬆地做到這一點的大熊貓:

import pandas as pd 

df = pd.read_csv('keyword.csv', header = None) 

df.columns = ['col1','col2','col3','col4'] 

df['avgCol'] = (df['col2'] + df['col4'])/2 
+0

這是工作很好:)謝謝.. –

+0

再次感謝!這也可以讓我直接拿平均分和圖上的圖。 –

1

在numpy的你可以用np.mean做到這一點(見文檔here您可以在任一軸運行這個0是垂直,1分。水平訣竅是你需要首先刪除沒有文本的列,在你運行你的行data = np.genfromtxt('keyword.csv', delimiter=',', comments=None)接下來刪除包含文本的列,在這種情況下,第0列和第2列,所以你可以用data2 = np.delete(data, np.s_[::2], 1)刪除從0開始的其他行。一旦你有了這個,你可以使用d3 = np.mean(data2, axis=1),並得到一個所需的數組數組。爲了得到這個作爲原始數據的第四列,然後使用data = np.insert(data, data.shape[1], d3, axis=1)

一起:

data = np.genfromtxt('keyword.csv', delimiter=',', comments=None) 
data2 = np.delete(data, np.s_[::2], 1) 
d3 = np.mean(data2, axis=1) 
data = np.insert(data, data.shape[1], d3, axis=1) 

我與這個最大的警告是data2線,只會有一個表的結構,你顯示的方式工作。如果您有更多不以文本,浮動,文本,浮點等排序的列或列,則必須重新編寫它才能正確刪除帶有文本的列。如果有必要,你可以編寫一個腳本來搜索帶有NaN值的列,一旦加載到一個numpy數組中。例如,np.all(np.isnan(data),axis = 0)將返回一個帶有True,False值的1-d數組,以確定列中的所有值是否爲nan。然後,您可以使用它來刪除索引值爲true的列。

功能:

indices = np.all(np.isnan(data), axis=0) 
indices = np.where(indices == True) 
data2 = np.delete(data, np.s_[indices[0]],1) 

大熊貓是偉大的,因爲它會自動將文本的平均值忽略列。它使這個計算值要簡單得多:

import pandas as pd 
df = pd.read_csv('keywords.csv', header=None) 
df[df.shape[1]] = df.mean(axis=1) 

這產生在含有整數/浮點值的該行中的平均值數據幀的末尾的新列。

+0

感謝您提供解決方案和詳細解釋。我在這裏有點困惑。如果我有兩列以上的數值會怎麼樣?我只能堅持特定的列?在平均計算之後,我會將該輸出值繪製成cdf。 –

+0

我厭倦了使用'df [df.shape [1]]'作爲繪製圖形的輸入,但我收到錯誤。任何簡單解決方案 –

+0

@SitzBlogz最新錯誤?你怎麼試圖繪製它? – Grr