如何将 pandas df 保存到 excel sheet 然后格式化它?
How do I save a pandas df to excel sheet then format it?
import pandas as pd
from datetime import datetime, date
df = pd.DataFrame({'Date and time': [datetime(2015, 1, 1, 11, 30, 55),
datetime(2015, 1, 2, 1, 20, 33),
datetime(2015, 1, 3, 11, 10 ),
datetime(2015, 1, 4, 16, 45, 35),
datetime(2015, 1, 5, 12, 10, 15)],
'Dates only': [date(2015, 2, 1),
date(2015, 2, 2),
date(2015, 2, 3),
date(2015, 2, 4),
date(2015, 2, 5)],
})
writer = pd.ExcelWriter("pandas_datetime_format.xlsx",
engine='xlsxwriter',
datetime_format='mmm d yyyy hh:mm:ss',
date_format='mmmm dd yyyy')
df.to_excel(writer, sheet_name='Sheet1')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
format_bc = workbook.add_format({
'font_name': 'Arial',
'font_size' : 14,
'font_color': 'white',
'bold': 0,
'border': 1,
'align': 'left',
'valign': 'vcenter',
'text_wrap': 1,
'fg_color': '#005581'})
worksheet.set_column('B:C', 20, format_bc)
writer.save()
上面的代码预计会生成格式化的 excel sheet,其中 B 列和 B 列具有蓝色背景和 format_bc 中指定的其他方面。
相反,我收到了下图所示的文件。
Not formatting the desired cells
有没有办法通过格式化将数据帧写入 excel sheet?
不幸的是,如此处 https://github.com/jmcnamara/XlsxWriter/issues/336 所示,无法使用 XlsxWriter
格式化 date
和 datetime
值。
您可以改为添加 df = df.astype(str)
以将数据帧格式从 date
/ datetime
更改为 string
。
df = pd.DataFrame(
{
'Date and time': [
datetime(2015, 1, 1, 11, 30, 55),
datetime(2015, 1, 2, 1, 20, 33),
[ ... ]
],
'Dates only': [
date(2015, 2, 1),
date(2015, 2, 2),
[ ... ]
]
}
)
df = df.astype(str)
writer = pd.ExcelWriter("pandas_datetime_format.xlsx",
engine='xlsxwriter',
[ ... ])
[ ... ]
输出:
请注意,如果您希望 headers 被新格式覆盖,请在代码开头添加:
import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None
import pandas as pd
from datetime import datetime, date
df = pd.DataFrame({'Date and time': [datetime(2015, 1, 1, 11, 30, 55),
datetime(2015, 1, 2, 1, 20, 33),
datetime(2015, 1, 3, 11, 10 ),
datetime(2015, 1, 4, 16, 45, 35),
datetime(2015, 1, 5, 12, 10, 15)],
'Dates only': [date(2015, 2, 1),
date(2015, 2, 2),
date(2015, 2, 3),
date(2015, 2, 4),
date(2015, 2, 5)],
})
writer = pd.ExcelWriter("pandas_datetime_format.xlsx",
engine='xlsxwriter',
datetime_format='mmm d yyyy hh:mm:ss',
date_format='mmmm dd yyyy')
df.to_excel(writer, sheet_name='Sheet1')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
format_bc = workbook.add_format({
'font_name': 'Arial',
'font_size' : 14,
'font_color': 'white',
'bold': 0,
'border': 1,
'align': 'left',
'valign': 'vcenter',
'text_wrap': 1,
'fg_color': '#005581'})
worksheet.set_column('B:C', 20, format_bc)
writer.save()
上面的代码预计会生成格式化的 excel sheet,其中 B 列和 B 列具有蓝色背景和 format_bc 中指定的其他方面。 相反,我收到了下图所示的文件。
Not formatting the desired cells
有没有办法通过格式化将数据帧写入 excel sheet?
不幸的是,如此处 https://github.com/jmcnamara/XlsxWriter/issues/336 所示,无法使用 XlsxWriter
格式化 date
和 datetime
值。
您可以改为添加 df = df.astype(str)
以将数据帧格式从 date
/ datetime
更改为 string
。
df = pd.DataFrame(
{
'Date and time': [
datetime(2015, 1, 1, 11, 30, 55),
datetime(2015, 1, 2, 1, 20, 33),
[ ... ]
],
'Dates only': [
date(2015, 2, 1),
date(2015, 2, 2),
[ ... ]
]
}
)
df = df.astype(str)
writer = pd.ExcelWriter("pandas_datetime_format.xlsx",
engine='xlsxwriter',
[ ... ])
[ ... ]
输出:
请注意,如果您希望 headers 被新格式覆盖,请在代码开头添加:
import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None