将pandas数据帧列转换为特定日期格式的日期类型?
将pandas数据帧列转换为特定日期格式的日期类型?
这个问题与Stack Overflow上所有可用的问题和答案都不同,因为我不想将我的数据类型更改为字符串以获得所需的输出。
我发现这是最令人困惑的,无法找到解决我的问题的正确方法。
我读取了一个具有以下列的Excel文件-
日期 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 . . .
我使用数据帧从Excel表中获取这些数据
df = pd.read_excel("data.xlsx")
首先,我想从这一列中去掉时间。我这样做-
df['日期'] = pd.to_datetime(df['日期']) df['日期'] = pd.to_datetime(df['日期'], errors='ignore', format='%d/%b/%Y').dt.date
它产生以下输出和datetime.date数据类型
日期 20/9/2017 20/9/2017 21/11/2018 18/7/2019 . . .
但是我想要以下类型,而不改变它为字符串。因为我想要将这些数据存储到另一个Excel文件中,并且这一列必须在我的Excel表中应用筛选时作为日期列。
日期 20/Sep/2017 20/Sep/2017 21/Nov/2018 18/Jul/2019 . . .
我可以通过以下方式产生上述输出
df['日期'] = df['日期'].apply(lambda x: x.strftime('%d/%b/%Y'))
但是这个日期列将再次被更改为字符串。但是我不希望它作为字符串。我希望它作为除每个单元格中的时间值之外的datetime类型。
将其从字符串转换为datetime后的一个可能的解决方案如下,但它将再次添加时间值-
df['日期'] = pd.to_datetime(df['日期'])
执行上述两个步骤后,它还将包括时间为12:00:00 AM或00:00:00 AM的日期值。
希望我表达清楚。
如何获得最终列值为日期类型的期望结果
问题出现的原因是希望将pandas dataframe的列转换为特定格式的日期类型,但是pandas的日期格式化功能无法满足需求。解决方法是通过使用openpyxl模块来格式化Excel工作簿中的列。
解决方法的具体步骤如下:
1. 导入openpyxl模块。
2. 使用openpyxl的`load_workbook`函数加载Excel工作簿。
3. 获取活动工作表,例如`sheet = workbook['Sheet1']`。
4. 假设要格式化的列是M列,数据从M2开始。
5. 使用循环遍历从M2到Mn的所有单元格。
6. 对于每个单元格,设置`number_format`属性为"DD/MM/YY"格式。
7. 保存工作簿并关闭。
以上就是将pandas dataframe列转换为特定日期格式的解决方法。通过使用openpyxl模块,可以在保存Excel工作簿后重新打开并格式化列。
问题:如何将pandas dataframe的列转换为特定日期格式的日期类型?
原因:在将数据写入Excel时,需要设置日期格式,但不清楚在上述代码中如何指定日期列的列名。
解决方法:可以通过设置date_format参数来指定日期格式。在使用xlsxwriter引擎创建ExcelWriter对象时,可以通过date_format参数来指定日期格式。代码如下:
writer = pd.ExcelWriter("pandas_datetime.xlsx", engine='xlsxwriter', date_format='%d/%b/%Y') df.to_excel(writer)
这样,写入Excel时,所有的日期类型列都会使用指定的日期格式。
如果希望使用其他方法来解决这个问题,可以考虑使用pandas的to_datetime函数将日期列转换为日期类型,并使用strftime函数将日期格式化为所需的格式。代码如下:
df['date_column'] = pd.to_datetime(df['date_column']) df['date_column'] = df['date_column'].dt.strftime('%d/%b/%Y')
这样,日期列将被转换为指定格式的日期类型。
另外,如果不想在日期中包含时间部分,可以使用strftime函数将时间格式化为指定的格式,并将结果赋值给日期列。代码如下:
df['date_column'] = df['date_column'].dt.strftime('%d/%b/%Y')
这样,日期列中将只包含日期部分,而不会包含时间部分。
通过设置date_format参数或使用to_datetime和strftime函数,可以将pandas dataframe的列转换为特定格式的日期类型。
问题:将pandas dataframe列转换为特定日期格式的日期类型的原因是什么?解决方法是什么?
原因:
问题的提出是因为作者希望将日期列转换为特定的日期格式,但不希望将其转换为字符串。作者想要在python/pandas中使用没有时间的日期格式。
解决方法:
在python/pandas中,如果想要获取没有时间的日期,只能使用"YYYY-MM-DD"这种格式。可以使用以下代码将日期转换为没有时间的日期格式:
df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y %I:%M:%S %p').dt.floor('d')
如果想要将日期转换为python日期格式,可以使用以下代码:
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')
作者问是否有其他支持库可以执行此任务,回答是不清楚,但猜测在python中可能不存在。
问题的原因是作者希望将最终的数据存储到另一个Excel文件中。在该Excel文件中,如果应用筛选器,将把值视为字符串而不是日期。作者使用这个方法来自动化Excel文件,使得Excel文件可以按照用户定义的格式自动生成每一列的数据。
作者询问是否有其他库可以实现这个任务,回答是不清楚,但猜测在python中可能不存在。
解决方法是在Excel中设置自定义格式,因为在python中无法实现。
感谢提供帮助的人,他还提供了一个链接,可能对解决问题有帮助。
在python/pandas中,将日期列转换为特定日期格式的日期类型是不可能的。解决方法是将日期转换为字符串格式或在Excel中设置自定义格式。