2016-12-06 14 views
1

私は60個の巨大なcsvファイルを持っています(それぞれ約2.5GB)。それぞれは1ヶ月のデータをカバーしており、私が興味を持っている「距離」の列があります。それぞれには約1400万行があります。パンダを使用して大規模なCSVファイルで平均を見つける

私は毎月の平均距離を見つける必要があります。

これは私がこれまで持っているものです。

import pandas as pd 
for x in range(1, 60): 
    df=pd.read_csv(r'x.csv', error_bad_lines=False, chunksize=100000) 
    for chunk in df: 
     print df["distance"].mean() 

まず私は「印刷」は良いアイデアではありません知っています。私は推測する変数に平均を割り当てる必要があります。第二に、私が必要とするのは、各チャンクだけでなく、データフレーム全体の平均です。

しかし、私はそれを行う方法がわかりません。私は、各チャンクの平均を求め、すべてのチャンクの単純平均を取ることを考えていました。それは、チャンクサイズがすべてのチャンクで等しい限り、データフレームの平均を与えるはずです。

第3に、私は60個のcsvファイルすべてに対してこれを行う必要があります。上記のコードで私のループは正しいですか?私のファイルの名前は1.csv〜60.csvです。

+2

距離と行数の総計を記録します。次に分割する。またスピードが問題であれば、このようなものを検討することを検討してください:(http://stackoverflow.com/questions/3122442/how-do-i-calculate-the-mean-of-a-column) –

+0

あなたがしたいジョブはPythonでのみ、あるいはsedやawkのようなGnu/Linuxツールを使うことができますか? –

+0

申し訳ありませんが、sedとawkに精通していません。可能であれば、Pythonを好むだろう。 – PythonGuy

答えて

3

ファイルの名前に基づいて修正することはほとんどありません。私はあなたのファイルが "1.csv"、 "2.csv"のような名前であると推測します。また、範囲が排他的であることを覚えておいて、範囲内で61に移動する必要があります。

distance_array = [] 
for x in range(1,61): 
    df = pd.read((str(x) + ".csv", error_bad_lines=False, chunksize=100000) 
    for index, row in df.iterrows(): 
     distance_array.append(x['distance']) 
print(sum(distance_array)/len(distance_array)) 
0

私は、データセットが大きすぎて、パンダのデータフレームとしてメモリに読み込めないと推測しています。その場合、各csvファイルでジェネレータを使用することを検討してください。Where to use yield in Python best?

平均的な結果は平均ですので、各行に合計を累積してインクリメンタルステップ。

関連する問題