将字典转换为DataFrame,然后导出为Excel文件
我想把一个字典转换成DataFrame,以便导出到Excel。由于不能直接导出字典列表,我需要把它转换成DataFrame。
不过,我在列/索引上遇到了一个问题,如果我理解正确的话,我有几列同名的情况,在DataFrame中这是不可能的。
一旦运行代码,就会出现这个错误:
ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
如何解决这个问题?
path = r"C:\zzz"
xls = pd.ExcelFile(path)
df1 = pd.read_excel(xls, 'CORRESPONDANCE')
df2 = pd.read_excel(xls, 'OP LIST')
coldel = np.r_[6, 7, 11:42]
df2.drop(df2.columns[coldel], inplace=True, axis=1)
df2= df2.drop(df2.index[0:7])
df2.columns = df2.iloc[0]
df2 = df2.sort_values(by='Portfolio',key=lambda x: x.str.split('MP'))
df2 = df2.dropna(subset=["Portfolio"])
df2 = df2.dropna(subset = ["Instrument Name"])
df2 = df2[df2.Portfolio != "Portfolio"]
filter_op_nature = ['Buy', 'Sell']
df2 = df2[df2['Op. Nature'].isin(filter_op_nature)]
df_pms = {query_id: grp.copy() for query_id, grp in df2.groupby("Portfolio")}
df3 = pd.DataFrame(data=df_pms, index=[0])
df3 = (df3.T)
df3.to_excel("output.xlsx")
print(df_pms)
解决方案
对于这条注释
确实df_pms是一个字典:这一行,是不是把它转换成df呢? df3 = pd.DataFrame(data=df_pms, index=[0])
pd.DataFrame(data=df_pms, index=[0]) 确实 尝试将字典转换成DataFrame,但问题在于字典内部的内容是什么。
当pandas看到像 {"portfolio_a": df,"portfolio_b": df} 这样的字典时——它将每个键视为一列的名称,每个值作为该列的数据。由于每个值本身又是一个完整的DataFrame。
{"col1": [1, 2, 3], "col2": [4, 5, 6]}
你给它的是这种结构,它就会出错
{"Portfolio_A": <df>, "Portfolio_B": <df>}
使用 pd.concat(),这是专门用来把多个DataFrame拼接在一起的工具:
df_all = pd.concat(df_pms.values(), ignore_index=True)
df_all.to_excel("output.xlsx", index=False)
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。