首页 > 解决方案 > 如何使用熊猫将日期视为纯文本?

问题描述

我使用 pandas 读取 .csv 文件,然后将其保存为 .xls 文件。代码如下:

import pandas as pd
df = pd.read_csv('filename.csv', encoding='GB18030')
print(df)
df.to_excel('filename.xls')

有一列包含像'2020/7/12'这样的日期,看起来熊猫将其识别为日期并自动将其输出到'2020-07-12'。我不想格式化此列或任何其他类似的列,我想保持所有数据与纯文本相同。

这种转换发生在read_csv(),因为print(df)在 之前已经输出了 YYYY-MM-DD to_excel()

我尝试使用df.info()检查该列的数据类型,数据类型是对象。然后我添加了参数dtype=pd.StringDtype()read_csv()它没有帮助。

该文件包含汉字所以我将编码设置为GB18030,不知道这是否重要。

标签: pythonpandas

解决方案


我关于pd.read_csv的经验表明:

  • 默认情况下,只有可转换为intfloat的列才会转换为相应的类型。
  • “类似日期”的字符串仍被读取为字符串(生成的DataFrame中的列类型实际上是object)。

如果您希望read_csv将此类列转换为日期时间类型,则应传递parse_dates参数,指定要解析为日期的列列表。由于您没有这样做,因此不应将源列转换为日期时间类型。

要检查此详细信息,请在阅读file后运行file.info()并检查相关列的类型。

因此,如果相应的Excel文件列是Date类型,那么这种转换可能是由to_excel引起的。

还有一点关于变量名的评论:您使用read_csv阅读的是DataFrame,而不是file。实际文件是您从中读取内容的对象,但在这里您只传递了文件

所以不要使用文件之类的名称来命名生成的 DataFrame,因为这会产生误导。最好使用例如df

从 05:58Z 开始在评论后编辑

为了全面检查您在评论中写的内容,我创建了以下 CSV 文件:

DateBougth,Id,Value
2020/7/12,1031,500.15
2020/8/18,1032,700.40
2020/10/16,1033,452.17

我跑了:df = pd.read_csv('Input.csv')然后print(df),得到:

   DateBougth    Id   Value
0   2020/7/12  1031  500.15
1   2020/8/18  1032  700.40
2  2020/10/16  1033  452.17

因此,在Pandas级别,DateBugth 列中没有发生格式转换。剩下的两列都包含数字内容,因此它们被默默地转换为int64float64,但DateBought仍然是object

然后我将此df保存到一个Excel文件中,运行:df.to_excel('Output.xls') 并用Excel打开它。内容是:

在此处输入图像描述

因此,在 Excel 级别上都没有发生任何数据类型转换。

要查看B2单元格的实际数据类型(第一个DateBougth),我单击此单元格并按下Ctrl-1以显示单元格格式。正如我所料,格式是General(不是Date )。

也许你有一些过时的软件版本?我使用Python v. 3.8.2 和Pandas v. 1.0.3。

另一个要检查的细节:在pd.read_csv之后查看您的代码。也许您在某个地方放置了诸如df.DateBought = pd.to_datetime(df.DateBought)(显式类型转换)之类的指令?或者至少格式转换。请注意,在我的环境中, DateBought列的格式绝对没有变化。


推荐阅读