Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否将框架列转换为具有特定日期格式的日期类型?_Python_Pandas_Datetime - Fatal编程技术网

Python 是否将框架列转换为具有特定日期格式的日期类型?

Python 是否将框架列转换为具有特定日期格式的日期类型?,python,pandas,datetime,Python,Pandas,Datetime,这个问题不同于stack overflow中所有可用的问题和答案,因为我不想为了获得所需的输出而将数据类型更改为string 我发现这是一个非常令人困惑的问题,无法找到我问题的适当解决方案。 我读了一个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 =

这个问题不同于stack overflow中所有可用的问题和答案,因为我不想为了获得所需的输出而将数据类型更改为string

我发现这是一个非常令人困惑的问题,无法找到我问题的适当解决方案。 我读了一个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的时间以及日期值

希望我清楚。
如何使用最终列值作为日期类型获得所需结果

您可以在excelwriter中设置日期格式

writer = pd.ExcelWriter("pandas_datetime.xlsx",
                        engine='xlsxwriter',
                        date_format='%d/%b/%Y')
df.to_excel(writer)
但我希望它是下面的类型,而不是将其更改为字符串

不,这是不可能的,如果想要没有时间的日期时间,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')

但在上面的代码中,在哪里指定日期的列名呢?据我所知,当将数据写入excel时,它将对所有datetime类型的列使用此格式。您可以建议其他方法吗?xlsxwriter也包括时间,如12:00:00 AM,但我不想要它。也不以所需格式生成输出。我认为在python和pandas中不可能。是否有任何支持库可供使用执行此任务?@VishavGupta-此行为的原因是什么?因为我希望最终的数据帧存储在另一个Excel文件中。在那个Excel文件中,若我应用过滤器,它会将值作为字符串而不是日期处理。基本上,我是用它来自动化excel文件的。这样excel文件将自动生成用户定义格式的每一列。@VishavGupta-hmmm,那么如果将日期写入excel就不工作了?可能需要使用
df['Date']=pd.to_datetime(df['Date'],格式='%m/%d/%Y%I:%m:%S%p').dt.floor('d')
用于没有时间的datetime,而不是
dt.Date
用于datesYes。如果我们将此数据框日期写入excel,则不起作用。excel将其视为字符串值。还尝试了df['Date']=pd.to_datetime(df'Date'],格式='%m/%d/%Y%I:%m:%S%p').dt.floor('d')但无法生成所需的输出这是否回答了您的问题?