pandas 使用ExcelWriter和Openpyxl设置整列日期的格式

kwvwclae  于 2022-12-31  发布在  其他
关注(0)|答案(1)|浏览(152)

我尝试写一个PandasDataFrame到Excel,日期格式为"YYYY-MM-DD",省略时间。因为我需要写多个工作表,我想使用一些高级格式打开(即设置列宽),我使用ExcelWriter对象和openpyxl作为引擎。
现在,我似乎不知道如何格式化我的日期列。

import pandas as pd
df = pd.DataFrame({'string_col': ['abc', 'def', 'ghi']})
df['date_col'] = pd.date_range(start='2020-01-01', periods=3)
with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, 'test', index=False)

这将把日期写为2020-01-01 00:00:00。由于某种原因,我不明白,添加datetime_format='YYYY-MM-DD'没有任何效果 * 如果openpyxl是选定的引擎 *(如果engine没有指定,工作就很好)。
所以我想解决这个问题:

with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, 'test', index=False)
    writer.sheets['test'].column_dimensions['B'].width = 50
    writer.sheets['test'].column_dimensions['B'].number_format = 'YYYY-MM-DD'

列宽被正确应用,但数字格式设置不正确。另一方面,它确实可以将样式应用到单个单元格:writer.sheets['test']['B2'].number_format = 'YYYY-MM-DD'.
但是我如何将格式应用于整列(我有成千上万的单元格需要格式化)?我在openpyxl文档中找不到任何关于如何寻址整列的内容...
注:我可以:

for cell in writer.sheets['test']['B']:
    cell.number_format = 'YYYY-MM-DD'

但我的观点恰恰是要避免在每个单独的单元格上进行迭代。

2lpgd968

2lpgd9681#

可以将日期视为一列字符串,并对其进行切片以得到'YYYY-MM-DD'

import pandas as pd

df = pd.DataFrame({'string_col': ['abc', 'def', 'ghi']})

df['date_col'] = pd.date_range(start='2020-01-01', periods=3)
df['date_col'] = df['date_col'].astype("str").str.slice(start=0, stop=10)

with pd.ExcelWriter('test.xlsx', engine='openpyxl') as writer:
    df.to_excel(writer, 'test', index=False)
    writer.sheets['test'].column_dimensions['B'].width = 50

相关问题