2017-08-02 80 views
-1

我有一个非常模块化的代码库,其中包含许多函数。其中一些函数产生相当大的数据帧,我使用to_csv()保存到磁盘,然后直接将数据帧返回到调用函数。返回数据帧vs写入磁盘并从磁盘读取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

我编辑了我的答案,但由于我们不知道你在数据框之后想要做什么,所以我不能做得更好。 – ysearka

回答

0

编辑:

回答这个问题有点棘手,因为它取决于你想要达到什么之后。

事实上,如果您随后需要将整个数据帧加载到RAM中(就像使用Pandas创建或读取数据框时一样),那么您可能不想经过to_csv read_csv,因为它必须通过磁盘两次。这需要花时间来写,并且需要更多的时间来阅读(不包括如果你有像日期等解析的东西......)。

虽然这种方法的优点是可以保存文件。所以如果你事后搞定了你的数据框,你只需要将它们加载回read_csv而不是重新创建它们。此外,如果您不需要完整的数据框进行工作,则可以使用pandas.read_csv(skiprows = 10, nrows = 100)加载所需的文件块。这将有助于不会超载你的RAM。

如果您不需要这些技术,我建议您只从函数返回数据框而不将其写入磁盘。它会更快。

要完成这个答案,我会建议使用to_pickleread_pickle,因为它是这样的速度比to_csvread_csv当你只使用与大熊猫文件。