将字典保存为.XLSX

时间:2015-10-09 20:24:05

标签: python excel dictionary

使用Python + Pandas,是否有一种快速简便的方法可以将Dict(由键的文件名和值的几列数据组成)保存到.XLSX文件中?

经过一些研究,我尝试使用以下代码将其转换为Pandas DataFrame(因为我知道您可以从Pandas DataFrame写入.XLSX文件):

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:write()中不支持的类型(类'pandas.core.frame.DataFrame')。

我知道它会成功创建字典,它似乎创建了DataFrame,但为什么不创建该文件呢?

1 个答案:

答案 0 :(得分:1)

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)

错误发生在DataFrames的dict上from_dict创建一个奇怪的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而不是电子表格来考虑这一点。)