2016-05-10 12 views
0

私は2つの列に値の平均値を見つけようとしています。リスト内で値の平均値を見つけよう

入力:

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

平均して見ると2つの静的な列が常にありますか?または、列の数は動的になりますか? – PyNoob

+0

@pyNoob今のところ2列しかありません。未来を保証することはできません。 –

答えて

3

あなたは簡単にパンダでこれを行うことができます:numpyので

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

をあなたがドキュメントhereを参照してください(np.meanでこれを達成することができますあなたはどちらかの軸でこれを実行することができます; 0は垂直であり、かつ1がいます。あなたがあなたの行を実行した後にdata = np.genfromtxt('keyword.csv', delimiter=',', comments=None)次にテキストを含む列を削除します。この場合、列0と2は、data2 = np.delete(data, np.s_[::2], 1)を使用して0から始まる行を1つずつ削除することができます。これを取得したら、d3 = np.mean(data2, axis=1)を使用して、目的の配列の配列を取得できます。これを元のデータの4番目の列として取得するには、を使用します

すべて一緒:これで

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ラインで、それだけのテーブルで動作します、あなたが表示された方法を構造化。テキスト、フロート、テキスト、フロートなどの順序で並べ替えられていない列や列が多い場合は、テキストを含む列を正しく削除するために書き直す必要があります。必要に応じて、numpy配列にロードされたNaN値を持つ列を検索するためのスクリプトを記述することができます。例えばnp.all(np.isnan(data)、axis = 0)は、列内のすべての値が真であるかどうかのTrue、False値を持つ1次元配列を返します。これを使用して、indexのカラムを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

ソリューションと詳細な説明をありがとうございます。私はここで少し混乱している。 2列以上の数値がある場合はどうなりますか?特定の列のみに固執する必要がありますか?平均計算の後、私はcdfをプロットするためにその出力値を取るでしょう。 –

+0

グラフをプロットするための入力として 'df [df.shape [1]]'を使用するのに疲れましたが、エラーが発生しています。任意の簡単なソリューション? –

+0

@SitzBlogzエラーは何ですか?どのようにそれをプロットしようとしていますか? – Grr

関連する問題