生成生成我观察到的数据框的代码(多级索引)

Generate the code that produces my observed dataframe (Multilevel index)

我的 Jupyter notebook 上有一个 DataFrame,我想生成一个代码,一旦我编写就可以生成我观察到的相同 DataFrame。我的问题的原因是我有一个非常大的 dataFrame 并将其分解然后应用了很多不同的技术,包括数据透视表。因此,我想拥有我新生成的 df。

我期待我从 (df) 中编写的类似 generate_dataframe 的函数将给我生成此特定 DataFrame 的代码,该 DataFrame 可能包含多级索引。

设置

假设您已经 pickle 加载了

import pickle

解决方案

此函数应该会生成您需要的代码。

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

示范[​​=18=]
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

这有点 hack,但会为您提供可以复制和粘贴的可读代码(如果重要的话)。

(这里借用了@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