我有一个45列和1000行的数据框。我的要求是使用每个列的前2个值及其百分比创建一个excel工作表(假设col 1的值“ python”在其中存在500次,百分比应为50)
我用过:
writer = pd.ExcelWriter('abc.xlsx')
df = pd.read_sql('select * from table limit 1000', <db connection sring>)
column_list = df.columns.tolist()
df.fillna("NULL", inplace = True)
for obj in column_list:
df1 = pd.DataFrame(df[obj].value_counts().nlargest(2)).to_excel(writer,sheet_name=obj
writer.save()
这会将输出写在同一文档的单独的excel选项卡中。我需要使用以下格式的单张纸:
Column Name Value Percentage
col1 abc 50
col1 def 30
col2 123 40
col2 456 30
....
让我也知道要获取此输出的任何其他功能。
答案 0 :(得分:1)
首先引起我注意的是,您每次都在更改工作表名称,方法是说sheet_name=obj
。如果您摆脱了这一点,那可能就可以解决您的问题。
如果没有,我建议将结果串联到一个大的DataFrame中,然后将该DataFrame写入Excel。
for obj in column_list:
df = pd.DataFrame(df[obj].value_counts().nlargest(2))
if df_master is None:
df_master = df
else:
df_master = pd.concat([df_master,df])
df_master.to_excel("abc.xlsx")
有关在Pandas中堆叠/连接数据框的更多信息 https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html