2017-11-20 6 views
0

ありません。なぜパンダのPythonの使用ディスク容量は、私は2枚のディスクを搭載したPCが持っている

私は以下のPythonコードを実行すると、私のSSDのすべてのスペースを "使用"します(1GBの空き領域しか持たない)。このコードは、フォルダ内のすべてのSASファイルを繰り返し処理し、操作ごとにグループを実行し、各ファイルの結果を1つの大きなデータフレームに追加します。

import pandas as pd 
import os 
import datetime 
import numpy as np 

#The function GetDailyPricePoints does the following: 
#1. Imports file 
#2. Creates "price" variable 
#3. Performs a group by 
#4. Decode byte variables and convert salesdate to date type (if needed) 

def GetDailyPricePoints(inpath,infile): 
    intable = pd.read_sas(filepath_or_buffer=os.path.join(inpath,infile)) 

    #Create price column 
    intable.loc[intable['quantity']!=0,'price'] = intable['salesvalue']/intable['quantity'] 
    intable['price'] = round(intable['price'].fillna(0.0),0) 

    #Create outtable 
    outtable = intable.groupby(["salesdate", "storecode", "price", "barcode"]).agg({'key_row':'count', 'salesvalue':'sum', 'quantity':'sum'}).reset_index().rename(columns = {'key_row':'Baskets', 'salesvalue':'Sales', 'quantity':'Quantity'}) 

    #Fix byte values and salesdate column 
    for column in outtable: 
     if not column in list(outtable.select_dtypes(include=[np.number]).columns.values): #loop non-numeric columns 
      outtable[column] = outtable[column].where(outtable[column].apply(type) != bytes, outtable[column].str.decode('utf-8')) 
     elif column=='salesdate': #numeric column and name is salesdate 
      outtable[column] = pd.to_timedelta(outtable[column], unit='D') + pd.Timestamp('1960-1-1') 

    return outtable 


inpath = r'C:\Users\admin\Desktop\Transactions' 
outpath = os.getcwd() + '\Export' 
outfile = 'DailyPricePoints' 

dirs = os.listdir(inpath) 
outtable = pd.DataFrame() 

#loop through SAS files in folder 
for file in dirs: 
    if file[-9:] == '.sas7bdat': 
     outtable.append(GetDailyPricePoints(inpath,file,decimals)) 

正確にディスク容量を使用していることを理解したいと思います。また、この "一時的な作業"が保存されているパスを私のHDDのパスに変更したいと思います。

+0

ページングする可能性がありますか? – shanmuga

答えて

1

RAMにすべてのデータをコピーしています。この場合は十分ではないので、Pythonは代わりにページファイルまたは仮想メモリを使用します。これを修正する唯一の方法は、より多くのメモリを取得することです。または、すべてを1つの大きなデータフレームに格納することはできません。各ファイルをouttable.to_pickle('csvfile.csv')のピクルスに書き込みます。あなたは一つの大きなCSVファイルですべてを保存を主張する場合

しかし、あなたが最初の引数としてファイルオブジェクトを渡すことで、CSVに追加することができます。

out = open('out.csv', 'a') 
outtable.to_csv(out, index = False) 

はあなたのループ内.to_csv()ステップを行います。

また、.append()データフレームのメソッドは、その場所のデータフレームを変更するのではなく、(リストを持つメソッドとは異なり)新しいデータフレームを返します。だからあなたの最後のコードブロックはおそらくあなたが期待していることをしていないでしょう。

+0

私はすべてを1つの大きなCSVに保存すると仮定していたので、open( 'out.csv'、 'a')..メソッドを使用しました。 –

+0

私は考えていた。少なくとも、ページファイルが保存されているハードディスクを変更する方法はありますか?他のドライブを使用していますか? –

+0

はい。これは接線で行われ、手順はオペレーティングシステムに依存しますが、Google検索で見つけることができます。簡単に言えば、通常はOSファイルを含んでいない物理ドライブ上にページファイルがありますが、この場合OSのドライブはSSDです(他のドライブはありません)。長所と短所を比較するためにいくつかの研究を行う必要があります。 –

関連する問題