从Excel读取时如何转换日期格式 - Python

时间:2015-11-11 18:10:15

标签: python datetime pandas type-conversion datetime-format

我正在阅读Excel表格。标题是月 - 日格式的日期,我希望保持这种方式。但是当它重新登录时,它会将格式更改为“2014-01-01 00:00:00”。我写了以下peice来修复它,但不起作用。

import pandas as pd
import numpy as np
import datetime
from datetime import date
import time
file_loc = "path.xlsx"
df = pd.read_excel(file_loc, index_col=None, na_values=['NA'], parse_cols = 37)
df.columns=pd.to_datetime(df.columns, format='%b-%y')

哪个没做任何事。在另一次尝试中,我做了以下事情:

df.columns = datetime.datetime.strptime(df.columns, '%Y-%m-%d %H:%M:%S').strftime('%b-%y')

返回must be str, not datetime.datetime错误。我不知道如何让它按行单元格读取字符串来读取字符串!

以下是示例数据:

NaT 11/14/2015 00:00:00 12/15/2015 00:00:00 1/15/2016 00:00:00
A   5                   1                   6
B   6                   3                   3   

我的主要问题是它无法将其识别为标题,例如,df['11/14/2015 00:00:00']返回keyError

感谢任何帮助。

更新:这是一张照片,用于说明我保留的内容!方框6是apply的实现,方框7是我的数据。

enter image description here

2 个答案:

答案 0 :(得分:1)

import datetime
df = pd.DataFrame({'data': ["11/14/2015 00:00:00", "11/14/2015 00:10:00", "11/14/2015 00:20:00"]})
df["data"].apply(lambda x: datetime.datetime.strptime(x, '%m/%d/%Y %H:%M:%S').strftime('%b-%y'))

修改

如果您想使用df.columns,可以使用map功能:

df.columns = list(map(lambda x: datetime.datetime.strptime(x, '%m/%d/%Y %H:%M:%S').strftime('%b-%y'), df1.columns))

如果您使用的是python 3.x,则需要列表,因为默认情况下它是迭代器。

答案 1 :(得分:0)

问题可能是excel中的数据没有以您认为的字符串格式存储。也许它存储为数字,只在excel中显示为日期字符串。

Excel有时会使用纪元后的毫秒来存储日期。 检查您在df数组中看到的实际值。

这显示了什么?

from pprint import pprint
pprint(df)