Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 读取csv文件并使用文本换行将df写入excel_Python_Pandas_Format - Fatal编程技术网

Python 读取csv文件并使用文本换行将df写入excel

Python 读取csv文件并使用文本换行将df写入excel,python,pandas,format,Python,Pandas,Format,我正在尝试获得以下输出。除标题外,所有行和列均为文本换行: 格式应用于除标题以外的所有行和列。我不知道为什么格式不适用于第一列(标题),或者我想手动添加列标题号,如0、1、2等,以便我将标题的开头部分打开,因此所有行和列都将被格式化 在上面的屏幕截图中,换行文字不应用于A1到E1,C1列的标题有很多空间。如果我手动单击“换行文字”,它会对齐,否则所有标题都不会使用换行文字进行格式化。有几个问题: 您的代码正在正确尝试格式化标题,但当您使用.to_excel()创建文件时,您告诉它从行/col1

我正在尝试获得以下输出。除标题外,所有行和列均为文本换行:

格式应用于除标题以外的所有行和列。我不知道为什么格式不适用于第一列(标题),或者我想手动添加列标题号,如0、1、2等,以便我将标题的开头部分打开,因此所有行和列都将被格式化

在上面的屏幕截图中,换行文字不应用于A1到E1,C1列的标题有很多空间。如果我手动单击“换行文字”,它会对齐,否则所有标题都不会使用换行文字进行格式化。

有几个问题:

  • 您的代码正在正确尝试格式化标题,但当您使用
    .to_excel()
    创建文件时,您告诉它从行/col
    1,1开始。不过,单元格的编号是从
    0,0
    开始的。因此,如果您改为:

    df.to_excel(writer,sheet_name='Sheet1', startrow=0, startcol=0, header=True, index=False, encoding='utf8')  
    
    您将看到列
    A
    和行
    1
    都已格式化:

    i、 e.
    列A
    0
    行1
    0

  • 使用Pandas写入标头时,它将应用自己的格式,这将覆盖您提供的格式。若要解决此问题,请关闭标题并使其仅从第1行开始写入数据,然后手动写入标题

  • 以下内容可能更清楚一些:

    import pandas as pd
    import pandas.io.formats.style
    import os
    from pandas import ExcelWriter
    import numpy as np
    
    from xlsxwriter.utility import xl_rowcol_to_cell
    
    writer = pd.ExcelWriter('test1.xlsx', engine='xlsxwriter', options={'strings_to_numbers': True}, date_format='mmmm dd yyyy')  
    #df = pd.read_csv("D:\\Users\\u700216\\Desktop\\Reports\\CD_Counts.csv")
    df = pd.read_csv("CD_Counts.csv")
    df.to_excel(writer, sheet_name='Sheet1', startrow=1 , startcol=0, header=False, index=False, encoding='utf8')  
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    
    format_header = workbook.add_format()
    format_header.set_align('center')
    format_header.set_bold()
    format_header.set_text_wrap()
    format_header.set_border()
    
    format_data = workbook.add_format()
    format_data.set_align('center')
    format_data.set_text_wrap()
    
    worksheet.set_column('A:Z', 20, format_data)
    worksheet.set_row(0, 40, format_header)
    
    # Write the header manually
    for colx, value in enumerate(df.columns.values):
        worksheet.write(0, colx, value)
    
    writer.save()
    
    这将给你:


    注意:也可以告诉熊猫要使用的样式,或者强制熊猫使用
    None
    ,这样熊猫将继承你自己的样式。这种方法的唯一缺点是,所需的方法取决于所使用的熊猫的版本。此方法适用于所有版本。

    我建议您编辑此问题,以包含Excel屏幕截图,显示您希望数据的显示方式。列格式不应用于第一行的标题单元格,因为Pandas已将单元格格式应用于这些单元格,并覆盖了列格式。请参阅此SO问题中的和解释。我尝试了pd.formats.format.header_style=None它抛出错误模块“pandas”没有属性“formats”,那么您的pandas版本可能早于0.18.1。尝试链接答案中显示的旧版本:
    pd.core.format.header\u style=None
    好!非常感谢:)A栏为0,第1行为0不起作用:(居中对齐起作用,但文本换行不起作用。在C1行中,有一个标题有很大的空间,但它不会换行文本:(请添加一个屏幕截图,说明您试图在问题中获得的内容(即在Excel中手动制作一个外观正确的标题)。我添加了一个屏幕截图。请查看itI。我已更新脚本以解决标题行上的文本换行问题。在excel for dates中,我获取的文本日期有两位数错误!是否可以解决此问题?
    import pandas as pd
    import pandas.io.formats.style
    import os
    from pandas import ExcelWriter
    import numpy as np
    
    from xlsxwriter.utility import xl_rowcol_to_cell
    
    writer = pd.ExcelWriter('test1.xlsx', engine='xlsxwriter', options={'strings_to_numbers': True}, date_format='mmmm dd yyyy')  
    #df = pd.read_csv("D:\\Users\\u700216\\Desktop\\Reports\\CD_Counts.csv")
    df = pd.read_csv("CD_Counts.csv")
    df.to_excel(writer, sheet_name='Sheet1', startrow=1 , startcol=0, header=False, index=False, encoding='utf8')  
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    
    format_header = workbook.add_format()
    format_header.set_align('center')
    format_header.set_bold()
    format_header.set_text_wrap()
    format_header.set_border()
    
    format_data = workbook.add_format()
    format_data.set_align('center')
    format_data.set_text_wrap()
    
    worksheet.set_column('A:Z', 20, format_data)
    worksheet.set_row(0, 40, format_header)
    
    # Write the header manually
    for colx, value in enumerate(df.columns.values):
        worksheet.write(0, colx, value)
    
    writer.save()