我正在阅读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是我的数据。
答案 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)