如何使用Pandas将日期视为纯文本?

2024-09-26 22:54:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用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)已经在to_excel()之前输出YYYY-MM-DD

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

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


Tags: 文件csvto代码importpandasdfread
2条回答

问题解决了。我仔细检查了我的.csv文件,用记事本打开了它,数据是2020-07-12,在Office上显示为2020/7/12。结果表明,Office将日期重新格式化为yyyy/m/d(基于您所在的地区)。我正在为我的公司开发一个处理数据并将数据导入DB的工具,我们通过复制和粘贴手动完成这些工作,所以没有人注意到这个问题。感谢@Valdi_Bo的调查和耐心

我关于pd.read\u csv的经验表明:

  • 默认情况下,仅可转换为intfloat的列 转换为各自的类型
  • “类似日期”的字符串仍被读取为字符串(中的列类型为 产生的数据帧实际上是对象

如果希望read\u csv将此类列转换为datetime类型,您可以 应传递parse_dates参数,指定要删除的列的列表 解析为日期。因为您没有这样做,所以不应该删除任何源列 已转换为日期时间类型

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

因此,如果相应的Excel文件列为Date类型,则可能 此转换是由转换为\u excel引起的

还有一条关于变量名的注释: 使用read\u csv读取的是一个数据帧,而不是文件。 实际文件是从中读取内容的源对象, 但这里您只传递了文件名

因此,不要使用像file这样的名称来命名结果数据帧,如下所示 这是误导。最好使用例如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级别上,datebouth 柱其余两列都包含数字内容,因此 无声地转换为int64float64,但datebuy仍然是对象

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

enter image description here

因此,在Excel级别都没有进行任何数据类型转换

要查看B2单元格的实际数据类型(第一个datebouth), 我单击此单元格并按Ctrl-1以显示单元格格式。 格式是常规(不是日期),正如我所预料的那样

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

另一个需要检查的细节:在pd.read\u csv之后查看代码。 也许你把指令放在某个地方,比如df.datebunded=pd.to_datetime(df.datebunded)(显式类型转换)? 或者至少是格式转换。请注意,在我的环境中 datebunded列的格式绝对没有变化

相关问题 更多 >

    热门问题