ExcelWriter ValueError:将df保存到Excel时,Excel不支持带时区的日期时间

Gus*_*ing 9 python pandas xlsxwriter

我在这个问题上运行了很长一段时间。

我将作者设置如下:

writer = pd.ExcelWriter(arquivo+'.xlsx', engine = 'xlsxwriter', options = {'remove_timezone': True})
df.to_excel(writer, header = True, index = True)
Run Code Online (Sandbox Code Playgroud)

此代码在 s 函数内。问题是每次我运行代码时,它都会从数据库中获取信息,其中包含两列 datetime64[ns, UTC] 对象和时区信息。但是当保存到 Excel 的代码运行时,我收到:

ValueError: Excel does not support datetimes with timezones. Please ensure that datetimes are timezone unaware before writing to Excel.
Run Code Online (Sandbox Code Playgroud)

我已经尝试了几种方法,例如 'dt.tz_convert'、replace(tzinfo=None) 和我在这里和周围找到的其他解决方案。

代码在我的个人电脑上运行没有问题,我的同事使用相同的机器规格可以运行代码。只有在我的机器上没有。我已经重新安装了python和所有包,包括格式化机器什么的,错误仍然存​​在。

xlrd v1.1.0

xlsxwriter v1.0.4

蟒蛇 3.7.4

熊猫 v0.25.1

如果有人能给这个问题带来一些启示,我将不胜感激。

谢谢

小智 9

你的时间戳是什么格式的?

我刚刚遇到了类似的问题。

我试图将数据框保存到 Excel。但是我得到了:

错误代码

我检查了这种格式的日期格式 '2019-09-01T00:00:00.000Z'

这是pandas._libs.tslibs.timestamps.Timestamp 来自的时间戳pandas.to_datetime

其中包括date()将日期转换为"%Y-%m-%d"excel 可接受的格式的方法

所以我的代码是这样的:

#Pseudo
df['date'] = old_dates
df['date'] = df['date'].apply(lambda a: pd.to_datetime(a).date()) 
# .date() removes timezone

...df.to_excel etc.
Run Code Online (Sandbox Code Playgroud)


小智 7

这应该可以完成工作,在导出到 excel 之前从列中删除时区(使用 tz_localize(None))。

# Check which columns have timezones datetime64[ns, UTC] 
df.dtypes

# Remove timezone from columns
df['date'] = df['date'].dt.tz_localize(None)

# Export to excel
df.to_excel('filename.xlsx')
Run Code Online (Sandbox Code Playgroud)

  • 给我“AttributeError:只能使用带有日期时间值的 .dt 访问器” (4认同)
  • tz_convert(None) 通常是更好的选择。如果存储的日期没有时区信息,则应首先将其转换为 UTC 以方便移植。tz_convert 会执行此操作,而 tz_localize 只是删除时区信息。 (3认同)

小智 6

我发现这种方式更简单、更有活力。此解决方案您按类型选择列并应用所需的转换。

date_columns = df.select_dtypes(include=['datetime64[ns, UTC]']).columns
for date_column in date_columns:
    df[date_column] = df[date_column].dt.date
    
df.to_excel('anbima_feed.xlsx',engine='xlsxwriter')
Run Code Online (Sandbox Code Playgroud)