此问题不同于堆栈溢出中所有可用的问题和答案,因为我不想将数据类型更改为字符串以获得所需的输出。
我觉得这是最令人困惑的,无法找到解决我问题的适当方法。 我读了一个Excel文件,其中有以下一列-
Date
9/20/2017 7:27:30 PM
9/20/2017 7:27:30 PM
11/21/2018 8:28:30 AM
7/18/2019 9:30:08 PM
.
.
.
我正在借助dataframe从excel工作表中获取数据
df = pd.read_excel("data.xlsx")
首先,我想从此列中删除时间。我这样做是-
df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = pd.to_datetime(df['Date'], errors='ignore', format='%d/%b/%Y').dt.date
它产生以下输出和数据类型为datetime.date
Date
20/9/2017
20/9/2017
21/11/2018
18/7/2019
.
.
.
但是我希望将其作为以下类型而不将其更改为字符串。因为我想将此数据存储到另一个excel文件中,并且如果我们在excel工作表中应用过滤,则此列必须表现为日期列。
Date
20/Sep/2017
20/Sep/2017
21/Nov/2018
18/Jul/2019
.
.
.
我可以通过以下方式产生以上输出
df['Date'] = df['Date'].apply(lambda x: x.strftime('%d/%b/%Y'))
但是再次将这个日期列更改为字符串。但是我不希望它作为字符串。我希望它作为datetime类型,但不包括每个单元格中的时间值。 将其从字符串转换为日期时间后,可能的解决方案如下,但它将再次在其中添加时间值-
df['Date'] = pd.to_datetime(df['Date'])
执行上述两个步骤后,还将包括时间12:00:00 AM或00:00:00 AM以及日期值。
希望我很清楚。 如何获得以最终列值作为日期类型的期望结果
答案 0 :(得分:0)
您可以在excelwriter中设置date_format
writer = pd.ExcelWriter("pandas_datetime.xlsx",
engine='xlsxwriter',
date_format='%d/%b/%Y')
df.to_excel(writer)
答案 1 :(得分:0)
但是我希望它具有以下类型,而无需将其更改为字符串
不可能,如果想要没有时间的日期时间,则python / pandas中只有模式YYYY-MM-DD
。
#datetimes with no times
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y %I:%M:%S %p').dt.floor('d')
#python dates
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y %I:%M:%S %p').dt.date
对于所有自定义格式,日期时间都将转换为以下字符串:
df['Date'] = df['Date'].dt.strftime('%d/%b/%Y')