Python 3.x 为什么python使用磁盘空间
我有一台带有两个磁盘的电脑:Python 3.x 为什么python使用磁盘空间,python-3.x,pandas,temporary-files,Python 3.x,Pandas,Temporary Files,我有一台带有两个磁盘的电脑: 110GB固态硬盘 1TB硬盘驱动器 SSD中大约有18GB的可用空间 当我运行下面的python代码时,它“使用”了SSD中的所有空间(我最后只有1GB可用空间)。此代码迭代文件夹中的所有SAS文件,执行分组操作,并将每个文件的结果附加到一个大数据帧 import pandas as pd import os import datetime import numpy as np #The function GetDailyPricePoints does t
- 110GB固态硬盘
- 1TB硬盘驱动器
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))
我想了解到底是什么在使用磁盘空间。此外,我想将保存此“临时工作”的路径更改为硬盘中的路径。您正在将所有数据复制到RAM中;在这种情况下,您没有足够的内存,因此Python使用页面文件或虚拟内存。解决此问题的唯一方法是获得更多内存,或者您不能将所有内容都存储在一个大数据帧中,例如,使用
outtable.to_pickle('csvfile.csv')
将每个文件写入pickle
但是,如果坚持将所有内容存储在一个大型csv中,则可以通过将文件对象作为第一个参数传递来附加到csv:
out = open('out.csv', 'a')
outtable.to_csv(out, index = False)
在循环中执行.to_csv()
步骤
此外,dataframes的
.append()
方法不会就地修改dataframe,而是返回一个新的dataframe(与使用列表的方法不同)。因此,您的最后一块代码可能没有达到预期效果。您正在将所有数据复制到RAM中;在这种情况下,您没有足够的内存,因此Python使用页面文件或虚拟内存。解决此问题的唯一方法是获得更多内存,或者您不能将所有内容都存储在一个大数据帧中,例如,使用outtable.to_pickle('csvfile.csv')
将每个文件写入pickle
但是,如果坚持将所有内容存储在一个大型csv中,则可以通过将文件对象作为第一个参数传递来附加到csv:
out = open('out.csv', 'a')
outtable.to_csv(out, index = False)
在循环中执行.to_csv()
步骤
此外,dataframes的
.append()
方法不会就地修改dataframe,而是返回一个新的dataframe(与使用列表的方法不同)。因此,您的最后一块代码可能没有达到预期效果。可能是分页?可能是分页?正如您正确假设的那样,我将所有内容存储在一个大的CSV中,因此我使用了open('out.CSV','a')。。方法。我在想。。是否至少有办法更改保存页面文件的硬盘(并使用我的其他驱动器)?有。这是一个切线,步骤取决于操作系统,但可以通过谷歌搜索找到。需要注意的是,人们通常将页面文件放在不包含操作系统的物理驱动器上,但在这种情况下,您的操作系统驱动器是SSD(而另一个不是),所以你需要做一些研究来权衡利弊。我想让你知道,最终真正帮助我的是在函数中导入sas_文件并在那里创建outtable。在我上面给出的代码中,已经是这样了,但是我的实际代码有点不同。。。基本上,我不会在全局范围内创建pandas dataframe变量(希望我使用的是正确的术语),因为您正确地假设我将所有内容存储在一个大的CSV中,所以我使用了open('out.CSV','a')。。方法。我在想。。是否至少有办法更改保存页面文件的硬盘(并使用我的其他驱动器)?有。这是一个切线,步骤取决于操作系统,但可以通过谷歌搜索找到。需要注意的是,人们通常将页面文件放在不包含操作系统的物理驱动器上,但在这种情况下,您的操作系统驱动器是SSD(而另一个不是),所以你需要做一些研究来权衡利弊。我想让你知道,最终真正帮助我的是在函数中导入sas_文件并在那里创建outtable。在我上面给出的代码中,已经是这样了,但是我的实际代码有点不同。。。基本上,我不会在全局范围内创建数据帧变量(希望我使用的是正确的术语)