2014-05-05 65 views
2

我對df.rename()方法和一般的重命名有相當困惑的問題。無論我如何嘗試重命名現有數據框中的列,最終的HDF輸出尺寸都會增加一倍。與大多數僅限數字的框架不同,我的框架包含許多被視爲對象的unicode列。熊貓重命名膨脹HDF文件大小

我試過以下情況,但似乎都顯着膨脹生成使用df.to_hdf('some_file.h5','表')生成的HDF文件。

假設我有一個重新命名的字典叫rename_dict,看起來像:

rename_dict = {'old_column': 'new_column'} 

情況A(使用就地):

df.rename(columns=rename_dict, inplace=True) 

情況B(不使用就地):

df_renamed = df.rename(columns=rename_dict) 

案例C(手動重映射和刪除):

df['new_name'] = df['old_name] 
del df['old_name'] 

我覺得我必須缺少這一更名行動是如何發生的一些重要的認識,從而在HDF文件創建額外的數據。

我不確定它是否與此問題有關,但確實收到有關未映射到c類型的對象的性能警告。雖然這很糟糕,但是沒有應用任何重命名操作,文件大小是「正確的」,所以我將其作爲根源打了折扣。

任何洞察力(或解決方案)都會被感激地接受。

回答

2

對於C,見here

簡而言之,出於性能的考慮,刪除並不會真正刪除數據。重命名只是一個刪除後跟一個追加。您可以簡單地使用ptrepack文件來回收空間(或創建一個新空間)。 HDF5不是常規數據庫。對於某些類型的操作,即追加和查詢,它是高性能的。

您應該嘗試使用table格式來消除這些警告。一般來說你可能嘗試存儲非本地人類型,其中獲得,看到here

A和B是內存操作,無關與HDF5文件。

+0

同意A和B都在內存中。我正在讀取文件(.csv)到執行重命名的內存中,然後纔將其保存到HDF5。只要我將重命名方法應用於框架,它就會使輸出大小加倍。如果我省略重命名方法,則文件大小爲一半。由於所有操作都是在內存中執行的,並且只在最後寫入HDF,所以我似乎無法理解爲什麼重命名方法似乎會導致幀大小加倍,從而創建一個雙倍大小的HDF文件。 – PlaidFan

+0

你是從一個空文件開始的嗎? (例如''mode ='w'''),每次?,按照定義附加表。所以如果你運行你的腳本兩次,它會追加兩次。 – Jeff

+0

您應該更新您的個案以反映正在發生的事情。你在做'df = pd.read_csv(); df.to_hdf()'並用'x'字節獲取文件。相比'df = pd.read_csv(); 'df = df.rename(columns = rename_dict); df.to_hdf()'並獲得一個具有'2x'字節的文件? – TomAugspurger