gpt4 book ai didi

Python Pandas - 将日期列读取为字符串

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:40 25 4
gpt4 key购买 nike

我在 excel 文件中有一些数据,我使用 pandas read_excel 方法读取它。但是我想将所有列中的全部数据作为字符串读取,包括日期列。

问题是我想将日期列保留为字符串的原始格式。例如,我在 Excel 中有“31.01.2017”,它被格式化为日期,我想在我的数据框中有“31.01.2017”。

我认为使用 read_excel 的 dytpes 参数和 dtype=str 是正确的方法。但是 pandas 然后将日期列读取为日期时间,然后将其转换为字符串。所以最后我的数据框中总是有'2017-01-31 00:00:00'。

有什么办法吗?

最佳答案

Pandas 的行为是有道理的:

  • 如果日期列的 excel 格式是文本,pandas 将读取日期默认为字符串。
  • 如果日期列的 excel 格式是日期,pandas 会将日期读取为日期。

但是,您指出在 Excel 文件中日期列的格式设置为日期。如果是这种情况,则您的 Excel 文件中没有字符串开头。日期列的基础数据存储为 float 。您看到的字符串不是实际数据。如果不是字符串,则无法将其作为原始字符串读取。

更多信息:https://xlrd.readthedocs.io/en/latest/formatting.html

但假设出于某种原因,您希望 Python 显示与 Excel 相同的格式,但以字符串形式显示,而不查看 Excel。

首先你必须找到格式:

from openpyxl import load_workbook
wb = load_workbook('data.xlsx')
ws = wb.worksheets[0]
print(ws.cell(1,5).number_format) # look at the cell you are interested in

> '[$]dd/mm/yyyy;@'

然后转换为 strftime 函数可以理解的内容。 https://www.programiz.com/python-programming/datetime/strftime#format-code

form = form[3:-2]
form = form.replace('dd','%d')
form = form.replace('mm','%m')
form = form.replace('yyyy','%Y')
print(form)
> '%d/%m/%Y'

并应用它

df.loc[:,"date_field"].apply(lambda x: x.strftime(form))

> 0 01/02/2018
1 02/02/2018
2 03/02/2018
3 04/02/2018
4 05/02/2018

但是,如果您使用多种 Excel 日期格式,则必须为每种格式创建一个 strf-time 映射。

可能会有更实用的方法来做到这一点,比如以 csv 格式接收数据,或者首先将日期保留为 excel 的文本格式。

关于Python Pandas - 将日期列读取为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46693095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com