读取csv文件并将df写入带有文本换行的excel
Posted
技术标签:
【中文标题】读取csv文件并将df写入带有文本换行的excel【英文标题】:Reading csv file and writing the df to excel with text wrap 【发布时间】:2018-02-07 16:38:30 【问题描述】:我正在尝试获得以下输出。除了标题之外,所有行和列都是文本包装:
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.to_excel(writer,sheet_name='Sheet1',startrow=1 , startcol=1, header=True, index=False, encoding='utf8')
workbook = writer.book
worksheet = writer.sheets['Sheet1']
format = workbook.add_format()
format1 = workbook.add_format('bold': True, 'align' : 'left')
format.set_align('Center')
format1.set_align('Center')
format.set_text_wrap()
format1.set_text_wrap()
worksheet.set_row(0, 20, format1)
worksheet.set_column('A:Z', 30, format)
writer.save()
格式适用于除标题之外的所有行和列。我不知道为什么格式不适用于第一列(标题),或者我想手动添加列标题编号,例如 0、1、2 等,以便我将打开标题,因此所有行和列都将被格式化
在上面的截图中,换行文本不适用于 A1 到 E1,C1 列的标题有很多空间。如果我手动单击换行文本,它会对齐,否则所有标题都没有使用文本换行格式化。
【问题讨论】:
我建议您编辑问题以包含来自 Excel 的屏幕截图,显示您希望数据如何显示。 列格式不适用于第一行的标题单元格,因为 Pandas 已经对这些单元格应用了单元格格式并覆盖了列格式。请参阅此 SO 问题中的 following workaround 和解释。 我试过 pd.formats.format.header_style = None 它抛出错误模块 'pandas' has no attribute 'formats' 那么你的 Pandas 版本可能早于 0.18.1。尝试链接答案中显示的旧版本:pd.core.format.header_style = None
好的!非常感谢你:)
【参考方案1】:
几个问题:
您的代码正确地尝试格式化标题,但是当您使用.to_excel()
创建文件时,您告诉它从行/列1, 1
开始。不过,这些单元格的编号从0, 0
开始。因此,如果您更改为:
df.to_excel(writer,sheet_name='Sheet1', startrow=0, startcol=0, header=True, index=False, encoding='utf8')
您将看到 col A
和 row 1
都已格式化:
即Col A
是 0
和 Row 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()
这会给你:
注意: 也可以告诉 Pandas 要使用的样式,或者强制它为None
,这样它就会继承你自己的样式。这种方法的唯一缺点是所需的方法取决于正在使用的 Pandas 版本。这种方法适用于所有版本。
【讨论】:
Col A 为 0,第 1 行为 0 不起作用 :( 中心对齐有效,但文本换行无效。在 C1 行中,有一个标题空间很大,它不换行文本:( 请在您的问题中添加您想要获得的内容的屏幕截图(即在 Excel 中手动制作正确外观的屏幕截图)。 我添加了截图。请调查一下 我已更新脚本以解决标题行文本换行的问题。 在日期的 excel 中出现 2 位错误的文本日期!有可能解决吗?以上是关于读取csv文件并将df写入带有文本换行的excel的主要内容,如果未能解决你的问题,请参考以下文章
sh 将带有标题行的CSV /文本类型文件拆分为多个文件,并将标题行复制到每个文件中。
用python模糊检索EXCEL文件的内容,并写入新的EXCEL表?
nodejs对于文件的一些基本操作-读取文件-文件的写入-文件的拷贝-文件追加信息-读取指定路径下的所有文件路径-解决一个传入行的文本换行效果不起作用的问题- 删除文件操作