首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >读取excel文件和输出具有完全相同列数据类型的excel文件

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

Stack Overflow用户
提问于 2019-03-29 03:10:03
回答 1查看 70关注 0票数 1

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

代码语言:javascript
复制
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()

有没有办法保留列类型(如初始文件中定义的那样)或恢复为读入文件时的数据类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 03:37:15

您正在读取的csv文件肯定与excel文件不同。您可以在Windows中使用excel读取csv文件,但保存文件时的编码不同。您当然可以根据xlsxwriter规范设置单元格的格式。

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

当你读入你的csv时,如果你想保留它,你应该指定格式。现在,您可以让pandas动态地执行此操作(Pandas将尝试使用前100行左右的行来猜测列类型)。

更改读入的行以包含数据类型,它们将保留在输出中。我将假设您的专栏具有标题"ColumnA", "ColumnB", "ColumnC"

代码语言:javascript
复制
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“作为日期的列示例。我喜欢首先以字符串的形式读取日期,然后确保我想要的格式。因此,您可以添加以下内容:

代码语言:javascript
复制
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的输出中的百分比。

如果您有具有多种数据类型的列,我的建议是:不要使用。这是无组织的,并使下游应用程序的用例更加复杂。花更多的时间在前端组织数据,这样你在后端就不会那么头疼了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55405209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档