2017-08-02 118 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當你只使用與大熊貓文件。