读取excel文件并输出具有完全相同的列数据类型的excel文件

问题描述 投票:1回答:1

下面的代码只是读入一个excel文件,将其存储为df并将df写回excel文件。当我在excel中打开输出文件时,列(日期,数字)不一样......有些是文本,有些或数字等。

import pandas as pd
df = pd.read_csv("test.csv", encoding = "ISO-8859-1", dtype=object)


writer = pd.ExcelWriter('outputt.xlsx', engine='xlsxwriter') 
df.to_excel(writer, index = False, sheet_name='Sheet1') #drop the index
writer.save()

是否有一种方法可以保留列类型(在初始文件中定义)或在读入文件时恢复为数据类型?

python excel pandas
1个回答
2
投票

您正在读取一个csv文件,该文件肯定与excel文件不同。您可以在Windows中使用excel读取csv文件,但保存文件时编码会有所不同。您当然可以根据xlsxwriter规范格式化单元格。

但是,重要的是要注意xlsxwriter无法格式化已经具有标题或索引或日期或日期时间对象等格式的任何单元格。如果单个列中有多个数据类型,那么这也会有问题,因为pandas会将该列默认为object。将在输出中推断出“对象”类型的项目,因此它将再次被动态地指定为“最佳猜测”。

当您阅读csv时,如果要维护它,则应指定格式。现在你正在让熊猫动态地做这件事(Pandas将尝试使用前100行左右来猜测列类型)。

更改您读入的行以包含dtypes,它们将保留在输出中。我假设你的列有标题"ColumnA", "ColumnB", "ColumnC"

import pandas as pd
from datetime import datetime
df = pd.read_csv("test.csv", encoding = "ISO-8859-1", dtype={'ColumnA': int,
                                                             'ColumnB': float,
                                                             'ColumnC': str})

我们使用“ColumnC”作为日期的列示例。我喜欢先将日期作为字符串读取,然后确保我想要的格式。所以你可以添加这个:

df['ColumnC'] = pd.to_datetime(df['ColumnC'].dt.strftime('%m/%d/%Y')
# date would look like: 06/08/2016, but you can look at other formatting for dt.strftime

这将确保输出中的特定类型。可以应用进一步的格式化,例如浮点数中的小数位数,包括通过以下指南here输出的百分比。

如果你有多种数据类型的列,我的建议是:不要。这是无组织的,使下游应用程序的用例更加复杂。花更多的时间在前端组织数据,这样你就可以减少后端的麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.