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

时间:2017-10-11 16:19:37

标签: python excel pandas date

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

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

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

有没有办法做到这一点?

3 个答案:

答案 0 :(得分: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')

希望它有所帮助! : - )

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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

更多信息: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文本格式。