【问题标题】:Pandas Xlsxwriter time formatPandas Xlsxwriter 时间格式
【发布时间】:2015-12-14 12:55:45
【问题描述】:

我正在尝试使用 xlsxwriter 写出我的 pandas 表。我有两列:

Date       | Time  
10/10/2015  8:57
11/10/2015  10:23

但是当我使用 xlsxwriter 时,输出是:

Date       | Time
10/10/2015  0.63575435
11/10/2015  0.33256774

我尝试使用 datetime_format = 'hh:mm:ss' 但这并没有改变它。在不影响日期列的情况下,我还能如何让日期正确格式化?

【问题讨论】:

  • Time 列的 dtype 是什么?你能发布df.info()的输出吗?
  • 对于DateTime 列,它们都是非空对象。
  • 所以他们是str 而不是datetime?如果不发布我问的内容
  • 在创建作者或调用to_excel时尝试使用engine='openpyxl'
  • dtypes 和 df.into() 的输出分别为 Date objectDate 5 non-null object

标签: python pandas xlsxwriter


【解决方案1】:

以下代码适用于我,但有一些注意事项。自定义格式是否有效取决于您打开它时使用的 Windows/Excel 版本。 Excel 的自定义格式取决于 Windows 操作系统的语言设置。

Excel custom formatting

Windows date/time settings

是的,这不是最好的解决方案……但我们的想法是更改每列的格式,而不是更改如何解释正在创建的整个 excel 文件的数据类型。

import pandas as pd
from datetime import datetime, date

# Create a Pandas dataframe from some datetime data.
df = pd.DataFrame({'Date and time': [date(2015, 1, 1),
                                     date(2015, 1, 2),
                                     date(2015, 1, 3),
                                     date(2015, 1, 4),
                                     date(2015, 1, 5)],
                   'Time only':     ["11:30:55",
                                     "1:20:33",
                                    "11:10:00",
                                     "16:45:35",
                                    "12:10:15"],
                   })


df['Time only'] = df['Time only'].apply(pd.to_timedelta)
#df['Date and time'] = df['Date and time'].apply(pd.to_datetime)


# Create a Pandas Excel writer using XlsxWriter as the engine.
# Also set the default datetime and date formats.
writer = pd.ExcelWriter("pandas_datetime.xlsx",
                        engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1')

# Get the xlsxwriter workbook and worksheet objects in order to set the column
# widths, to make the dates clearer.
workbook  = writer.book
worksheet = writer.sheets['Sheet1']

#PLAY AROUND WITH THE NUM_FORMAT, IT DEPENDS ON YOUR WINDOWS AND EXCEL DATE/TIME SETTINGS WHAT WILL WORK
# Add some cell formats.
format1 = workbook.add_format({'num_format': 'd-mmm-yy'})
format2 = workbook.add_format({'num_format': "h:mm:ss"})

# Set the format

worksheet.set_column('B:B', None, format1)

worksheet.set_column('C:C', None, format2)

worksheet.set_column('B:C', 20)

# Close the Pandas Excel writer and output the Excel file.
writer.save()

【讨论】:

  • 当我尝试将 pandas 数据帧设置为 timedelta 或 datetime 时出现错误('TypeError: 'datetime.time' 类型的对象没有 len()')。至少我已经缩小了现在的问题所在 - 希望一旦我修复了 pandas 表,这将起作用。
  • 这种方法不适用于我的 Microsoft Excel for Mac(最新的 pandas 和 xlsxwriter)。
猜你喜欢
  • 2016-08-10
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多