2017-02-11 38 views
2

我在Jupyter筆記本上有一個DataFrame,我想生成一個代碼,一旦我寫入,就可以生成我觀察到的同一個DataFrame。我的問題的原因是我有一個非常大的數據框,並分解了它,然後應用了許多差異技術,包括數據透視表。因此,我想要我的新生成的df。生成生成我觀察到的數據幀的代碼(多級索引)

我期待一個函數,我寫的generate_dataframe out(df)會給我生成這個特定的DataFrame,可能包含多級索引的代碼。

+0

相似http://stackoverflow.com/questions/41769882/pandas-dataframe-to-code/ – JohnE

回答

1

設置

假設你有pickle加載已經

import pickle 

解決方案

這個功能應該產生你所需要的代碼。

def gen_code(df): 
    return 'pickle.loads({})'.format(pickle.dumps(df)) 

示範

df = pd.DataFrame(
    dict(
     A=[1, 2, 3], 
     B=list('XYZ') 
    ), 
    pd.MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1)]) 
) 

print(df) 

    A B 
a 1 1 X 
    2 2 Y 
b 1 3 Z 

code_string = gen_code(df) 

print(eval(code_string)) 

    A B 
a 1 1 X 
    2 2 Y 
b 1 3 Z 
1

這是一個黑客位,但會給你一個可以複製和粘貼可讀的代碼(如果該事項)。

(借款@ piRSquared的樣本數據在這裏)

def df_to_code(df): 
    print('index = pd.MultiIndex.from_tuples(', df.index.tolist(), ')') 
    print('dct = ', df.to_dict()) 
    print('new_df = pd.DataFrame(dct, index=index)') 

df_to_code(df) 

輸出:

index = pd.MultiIndex.from_tuples( [('a', 1), ('a', 2), ('b', 1)]) 
dct = {'A': {('a', 1): 1, ('b', 1): 3, ('a', 2): 2}, 'B': {('a', 1): 'X', ('b', 1): 'Z', ('a', 2): 'Y'}} 
new_df = pd.DataFrame(dct, index=index) 

那些三線是可執行文件,會給你回原來的數據框:

new_df 

    A B 
a 1 1 X 
    2 2 Y 
b 1 3 Z 
+0

我會說q認爲有用 – piRSquared

+0

那麼,你永遠不會知道...... thx – JohnE