将pandas数据帧列转换为特定日期格式的日期类型?

15 浏览
0 Comments

将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的日期值。

希望我表达清楚。

如何获得最终列值为日期类型的期望结果

0
0 Comments

问题出现的原因是希望将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工作簿后重新打开并格式化列。

0
0 Comments

问题:如何将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的列转换为特定格式的日期类型。

0
0 Comments

问题:将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中设置自定义格式。

0