返回数据帧与写入和从磁盘读取csv的效率

时间:2017-08-02 08:44:48

标签: python-3.x function pandas dataframe

我有一个非常模块化的代码库,具有许多功能。其中一些函数产生相当大的数据帧,我使用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')

我的问题是:上述哪一项是实现这一目标的更有效方法?

  • 将数据帧返回给调用函数?
  • 完成写入后,在调用函数中从磁盘读取文件。

1 个答案:

答案 0 :(得分:0)

修改

这个问题的答案有点棘手,因为它取决于你之后想要实现的目标。

事实上,如果你需要在RAM中加载整个数据帧(就像在使用Pandas创建或读取数据帧时一样),那么你可能不希望通过to_csv read_csv,因为它必须去通过你的磁盘两次。这需要花费一些时间来编写,并且需要花费很多时间来阅读(不计算你是否有像日期一样解析的东西......)。

这种方法的优点是可以保存文件。因此,如果您之后拧紧了数据框,则只需使用read_csv加载它们,而不是重新创建它们。此外,如果您不需要完整的数据帧,则可以使用pandas.read_csv(skiprows = 10, nrows = 100)加载所需的文件块。这有助于不会使RAM过载。

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

要完成此答案,我建议您使用to_pickleread_pickle,因为当您仅使用带有pandas的文件时,它比to_csvread_csv更快。