使 pandas to_excel 停止样式化
Make pandas to_excel stop styling
我正在使用 Pandas 编辑其他人正在使用的 Excel 文件。但是当我使用 df.to_excel
保存它时,Pandas 向 header 和索引中的单元格添加了一个难看的黑色边框。我希望它以纯格式编写,如果我在 Excel 中打开它,CSV 文件的外观。如果使用与读入时相同的样式写回就更好了
有没有办法让 df.to_excel
不带样式或使用原始样式编写?
谢谢。
试试这个技巧:
import io
pd.read_csv(io.StringIO(df.to_csv()), header=None)
.to_excel("output.xlsx", header=None, index=None)
如果你仍然想要索引和 header 值 - 但没有样式,你可以使用这个(需要 openpyxl):
def insert_dataframe(df,sheet,start_row=1,start_col=1):
"""inserts a dataframe into an openpyxl sheet at the given (row,col) position.
Parameters
----------
df : pandas.Dataframe
Any dataframe
sheet : openpyxl.worksheet.worksheet
The sheet where the dataframe should be inserted
start_row : int
The row where the dataframe should be insterted (default is 1)
start_col : int
The column where the dataframe should be insterted (default is 1)
"""
#iterate dataframe index names and insert
for name_idx, name in enumerate(df.index.names):
label_col=start_col+name_idx
sheet.cell(row=start_row, column=label_col, value=name)
#for each name iterate values as rows in the current index name column
value_row=start_row+1
for i_value in list(df.index.values):
if isinstance(df.index, pd.MultiIndex):
val=i_value[name_idx]
else:
val=i_value
sheet.cell(row=value_row, column=label_col, value=val)
#goto next row
value_row+=1
row_idx=0
col_idx=label_col+1
#insert values
for label,content in df.items():
sheet.cell(row=start_row, column=col_idx, value=label)
for row_idx,value_ in enumerate(content):
sheet.cell(row=start_row+row_idx+1, column=col_idx, value=value_)
col_idx+=1
要点:https://gist.github.com/Aer0naut/094ff1b6838b2177a4222591ace8f6bf
我正在使用 Pandas 编辑其他人正在使用的 Excel 文件。但是当我使用 df.to_excel
保存它时,Pandas 向 header 和索引中的单元格添加了一个难看的黑色边框。我希望它以纯格式编写,如果我在 Excel 中打开它,CSV 文件的外观。如果使用与读入时相同的样式写回就更好了
有没有办法让 df.to_excel
不带样式或使用原始样式编写?
谢谢。
试试这个技巧:
import io
pd.read_csv(io.StringIO(df.to_csv()), header=None)
.to_excel("output.xlsx", header=None, index=None)
如果你仍然想要索引和 header 值 - 但没有样式,你可以使用这个(需要 openpyxl):
def insert_dataframe(df,sheet,start_row=1,start_col=1):
"""inserts a dataframe into an openpyxl sheet at the given (row,col) position.
Parameters
----------
df : pandas.Dataframe
Any dataframe
sheet : openpyxl.worksheet.worksheet
The sheet where the dataframe should be inserted
start_row : int
The row where the dataframe should be insterted (default is 1)
start_col : int
The column where the dataframe should be insterted (default is 1)
"""
#iterate dataframe index names and insert
for name_idx, name in enumerate(df.index.names):
label_col=start_col+name_idx
sheet.cell(row=start_row, column=label_col, value=name)
#for each name iterate values as rows in the current index name column
value_row=start_row+1
for i_value in list(df.index.values):
if isinstance(df.index, pd.MultiIndex):
val=i_value[name_idx]
else:
val=i_value
sheet.cell(row=value_row, column=label_col, value=val)
#goto next row
value_row+=1
row_idx=0
col_idx=label_col+1
#insert values
for label,content in df.items():
sheet.cell(row=start_row, column=col_idx, value=label)
for row_idx,value_ in enumerate(content):
sheet.cell(row=start_row+row_idx+1, column=col_idx, value=value_)
col_idx+=1
要点:https://gist.github.com/Aer0naut/094ff1b6838b2177a4222591ace8f6bf