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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (47)

下面的代码只是读入一个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()

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

提问于
用户回答回答于

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

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

当您阅读csv时,如果要维护它,则应指定格式。现在你正在让panda动态地做这件事(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

这将确保输出中的特定类型。进一步的格式可以如小数的在浮子的数量,包括由以下指南在输出百分比被应用于这样的在这里

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

所属标签

可能回答问题的人

  • 应用案例分享

    1 粉丝490 提问5 回答
  • uncle_light

    5 粉丝518 提问4 回答
  • o o

    4 粉丝495 提问4 回答
  • 学生

    8 粉丝476 提问3 回答

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动