2017-02-11 58 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