You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python:带格式导出DataFrame至Excel及日期列仅显日期的方法

问题1:如何在Python中带格式将DataFrame导出至Excel?

要实现带格式导出,最常用的方案是结合pandas.ExcelWriter和Excel引擎(比如xlsxwriteropenpyxl),这样你能灵活自定义单元格样式、列宽、表头格式等细节。下面是个实用的实操示例:

  • 先确保安装好依赖库:

    pip install pandas xlsxwriter
    
  • 示例代码:

    import pandas as pd
    from datetime import datetime
    
    # 构造示例DataFrame
    data = {
        "日期": [datetime(2024, 1, 1), datetime(2024, 1, 2)],
        "销售额": [1000, 1500],
        "备注": ["正常", "促销"]
    }
    df = pd.DataFrame(data)
    
    # 创建ExcelWriter对象,指定xlsxwriter引擎
    with pd.ExcelWriter(r'D:\Users\Desktop\CPS.xlsx', engine='xlsxwriter') as writer:
        df.to_excel(writer, index=False, sheet_name='数据')
        
        # 获取工作簿和工作表对象,用于自定义格式
        workbook = writer.book
        worksheet = writer.sheets['数据']
        
        # 定义不同场景的格式:表头加粗居中、日期列格式、数值列格式
        header_format = workbook.add_format({'bold': True, 'align': 'center', 'valign': 'vcenter', 'border': 1})
        date_format = workbook.add_format({'num_format': 'yyyy-mm-dd', 'border': 1})
        number_format = workbook.add_format({'num_format': '#,##0', 'border': 1})
        
        # 给表头应用格式
        for col_num, value in enumerate(df.columns.values):
            worksheet.write(0, col_num, value, header_format)
        
        # 设置列宽和对应列的格式
        worksheet.set_column('A:A', 12, date_format)  # 日期列
        worksheet.set_column('B:B', 10, number_format) # 销售额列
        worksheet.set_column('C:C', 10) # 备注列
    

这个例子里,我们不仅完成了数据导出,还自定义了表头样式、日期和数值的显示格式,同时调整了列宽,让导出的Excel表格更规整美观。


问题2:导出后日期列同时显示日期和时间,如何仅显示日期但保留原数据格式?

你的需求核心是保留原始datetime数据的完整性,只是让Excel仅显示日期部分。这种情况完全不需要修改DataFrame里的原始数据,只需要在导出时给日期列设置对应的Excel单元格显示格式就行:

下面是针对你场景的修改代码:

import pandas as pd

# 假设你的df已经存在,包含两列日期值
# df = pd.read_csv('你的数据源路径.csv') # 替换成你的实际数据读取方式

with pd.ExcelWriter(r'D:\Users\Desktop\CPS.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, index=False, sheet_name='数据')
    
    workbook = writer.book
    worksheet = writer.sheets['数据']
    
    # 定义仅显示日期的格式(可以改成你需要的格式,比如mm/dd/yyyy)
    date_only_format = workbook.add_format({'num_format': 'yyyy-mm-dd'})
    
    # 方法1:按列索引设置(假设日期列是第0和第1列,根据实际调整)
    worksheet.set_column(0, 1, 12, date_only_format)
    
    # 方法2:按列名设置(更直观,推荐)
    # date_cols = ['你的日期列名1', '你的日期列名2'] # 替换成实际列名
    # for col_name in date_cols:
    #     col_idx = df.columns.get_loc(col_name)
    #     worksheet.set_column(col_idx, col_idx, 12, date_only_format)

这样导出后,Excel里的日期列只会显示日期部分,但你双击单元格查看原始数据时,时间信息依然存在——因为我们只是修改了单元格的显示格式,并没有改动DataFrame里的datetime原始数据。

如果你的日期列在DataFrame里是字符串类型,建议先转成datetime类型再导出,这样后续在Excel里也能方便进行日期相关操作:

df['日期列1'] = pd.to_datetime(df['日期列1'])
df['日期列2'] = pd.to_datetime(df['日期列2'])

内容的提问来源于stack exchange,提问作者Sandeep Bhatt

火山引擎 最新活动