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

标签 python excel pandas date

我在 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/

相关文章:

Python 3.6.1 : How to dynamically print a docstring?

python - 是否可以在 reportlab 中制作只有水平边框的表格?

python - which 和 type 在 vi​​rtualenv 中显示 IPython 可执行文件的不同路径,在 IPython 中导入失败,在标准解释器中导入成功?

python - 为什么字典查找总是比列表查找好?

python - 使用 pandas 将 xlsx 文件中的特定行添加到列表

c# - 使用电子表格设备保护 Excel 工作表,同时保持自动筛选

excel - 从数字中删除点

python - HDF5存储数据的维度

python - 在 Pandas Dataframe 中按天连接字符串列表

python - 在 Pandas 中制作堆叠条形图时出现关键错误