2015-10-09 3 views
2

Использование Python + Pandas позволяет быстро и просто сохранить Dict (состоящий из имен файлов для ключей и нескольких столбцов данных для значений) в файл .XLSX?Сохранение словаря в .XLSX

После некоторых исследований, я пытался превратить его в панде DataFrame (потому что я знаю, что вы можете написать в файл .xlsx из панды DataFrame), используя следующий код:

import pandas as pd 
import glob 
f_list = glob.glob("C:\\Users\\me\\dt\\xx\\*.xlsx") 

sheets = {f: pd.read_excel(f) for f in f_list} 
new_df = pd.DataFrame.from_dict(sheets, orient = "index") 
new_df.to_excel("ALL_RUCDR_DATA.xlsx") 

, но я получаю эту ошибку :

TypeError: Unsupported type (class 'pandas.core.frame.DataFrame') in write().

Я знаю, что это будет создавать словарь успешно, и, кажется, создать DataFrame, но почему это не будет создавать файл?

+0

Я не могу воспроизвести это поведение. Какую версию панд вы используете? – bernie

+0

Не могли бы вы привести простой пример dict, который демонстрирует это, например. 'sheets = {" a ": pd.DataFrame ([[1]], columns = [" A "])," b ": pd.DataFrame ([[2]], columns = [" B "])} '? Я думаю, что этот метод from_dict не делает то, что вы думаете, что он делает ... –

ответ

0

docs предлагаю вам сделать это с помощью следующих действий:

with pd.ExcelWriter('path_to_file.xlsx') as writer: 
    for (sheet_name, df) in sheets.items(): 
     df.to_excel(writer, sheet_name=sheet_name) 

ошибка происходит from_dict на Dict из DataFrames создает странное DataFrame, где каждый элемент является DataFrame:

In [11]: sheets = {"a": pd.DataFrame([[1]], columns=["A"]), "b": pd.DataFrame([[2], [3]], columns=["B"])} 

In [12]: pd.DataFrame.from_dict(sheets, orient='index') 
Out[12]: 
       0 
b  B 
0 2 
1 3 
a   A 
0 1 

In [13]: pd.DataFrame.from_dict(sheets, orient='index').applymap(type) 
Out[13]: 
             0 
b <class 'pandas.core.frame.DataFrame'> 
a <class 'pandas.core.frame.DataFrame'> 

Это не будет отображаться на листе excel, так как в качестве элементов ожидаются отдельные значения (например, int/float/string).

Если вы хотите объединить/объединить/соединить данные из своего словаря в один файл, проверьте merging section of the docs (подумайте об этом с точки зрения данных Pandas DataFrames, а не электронных таблиц).

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