使用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,但为什么不创建该文件呢?
答案 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而不是电子表格来考虑这一点。)