我有一个非常模块化的代码库,具有许多功能。其中一些函数产生相当大的数据帧,我使用to_csv()将其保存到磁盘,然后直接将数据帧返回给调用函数。
编辑使用@ ysearka的答案中的示例函数更好地解释问题
这就是我目前正在做的事情:
def my_func(some_input):
#df = something(some_input)
return dataframe
df = my_func(my_input)
我认为另一种方法是在写完成后从调用函数中的磁盘读取文件:
def my_func(some_input):
#df = something(some_input)
df.to_csv('my_file_name.csv')
df = pd.read_csv('my_file_name.csv')
我的问题是:上述哪一项是实现这一目标的更有效方法?
答案 0 :(得分:0)
修改强>
这个问题的答案有点棘手,因为它取决于你之后想要实现的目标。
事实上,如果你需要在RAM中加载整个数据帧(就像在使用Pandas创建或读取数据帧时一样),那么你可能不希望通过to_csv read_csv
,因为它必须去通过你的磁盘两次。这需要花费一些时间来编写,并且需要花费很多时间来阅读(不计算你是否有像日期一样解析的东西......)。
这种方法的优点是可以保存文件。因此,如果您之后拧紧了数据框,则只需使用read_csv
加载它们,而不是重新创建它们。此外,如果您不需要完整的数据帧,则可以使用pandas.read_csv(skiprows = 10, nrows = 100)
加载所需的文件块。这有助于不会使RAM过载。
如果您不需要这些技术,我建议您只从函数返回数据帧而不将其写入磁盘。它会更快。
要完成此答案,我建议您使用to_pickle
和read_pickle
,因为当您仅使用带有pandas的文件时,它比to_csv
和read_csv
更快。