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

问题描述 投票:2回答:3

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

问题是我希望将日期列保留为原始格式的字符串。例如,我在excel中有'31 .01.2017',它被格式化为日期,我希望在我的数据框中有'31 .01.2017'。

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

有没有办法做到这一点?

python excel pandas date
3个回答
1
投票

当您尝试将日期列保留在初始类型中时,以下代码可能对您有所帮助。在第一行中,我们向变量“cols”插入除日期列之外的所有列,然后在以下两行中我们只更改其余列的类型:

cols=[i for i in df.columns if i not in ["Date_column"]]

for col in cols:
    df[col]=df[col].astype('category')

希望能帮助到你! :-)


0
投票
df['date_column'] = df['date_column'].dt.strftime('%d.%m.%Y')

0
投票

大熊猫的行为是有道理的:

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

但是,您指出在Excelfile中,日期列被格式化为日期。如果是这种情况,Excelfile中就没有字符串开头。 date列的基础数据存储为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的文本格式保存日期。

© www.soinside.com 2019 - 2024. All rights reserved.