2017-02-11 2 views
2

У меня есть DataFrame на моем ноутбуке Jupyter, и я хотел бы сгенерировать код, который, как только я напишу, может генерировать тот же DataFrame, который я наблюдаю. Причина моего вопроса заключается в том, что у меня очень большой формат данных и он сломался, а затем применил множество разностных методов, включая сводные таблицы. Поэтому я хотел бы получить свой новый df.Создайте код, который создает мой наблюдаемый фрейм данных (многоуровневый индекс)

Я ожидаю, что функция, которую я пишу, как generate_dataframe из (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) 

Эти три линии являются исполняемыми и даст Вам оригинальную dataframe:

new_df 

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

Я бы сказал, что q ualifies как полезный – piRSquared

+0

Ну, вы никогда не знаете ... thx – JohnE

Смежные вопросы