Python xlwings - TypeError:必须是实数,而不是 Timedelta

发布于 2025-01-13 17:57:42 字数 687 浏览 0 评论 0原文

我有一个 pandas 数据框,其中包含 timedelta64[ns] 格式的列。 对于这个项目,我无法使用 df.to_excel(),我需要通过 xlwings 导入数据框,以便它打印到现有的 Excel 工作簿中并保持其格式。

当我尝试通常的操作时:

workbook_sablona_dochazka.sheets[zamestnanec].range('A1').options(index=False).value = individual_dochazka_zamestnanec

我收到错误: TypeError:必须是实数,而不是 Timedelta

有没有办法格式化我的 timedelta64[ns] 以便 xlwings 能够导入数据帧?我需要保留我的时间值,以便在导入 xlwings 后在 Excel 中再次变为 12:30:00,并且可能在 Excel 本身内部进行一些后格式化。

我尝试过:

individual_dochazka_zamestnanec['Příchod do práce'] = individual_dochazka_zamestnanec['Příchod do práce'].values.astype(float)

这解决了错误,但导入的列完全没有意义。

知道如何解决这个问题吗?

预先非常感谢您!

I have a pandas dataframe containing columns in timedelta64[ns] format.
For this project I cannot use df.to_excel() and I need to import the dataframe via xlwings so that it prints into existing Excel Workbook and keeps its format.

When I try the usual:

workbook_sablona_dochazka.sheets[zamestnanec].range('A1').options(index=False).value = individual_dochazka_zamestnanec

I receive error:
TypeError: must be real number, not Timedelta

Is there a way to format my timedelta64[ns] so that xlwings would be able to import the dataframe in? I need to preserve my time values so that it becomes 12:30:00 in Excel again after xlwings import and maybe some after-formatting inside the Excel itself.

I tried:

individual_dochazka_zamestnanec['Příchod do práce'] = individual_dochazka_zamestnanec['Příchod do práce'].values.astype(float)

This worked around the error but imported columns had totally out of sense numbers.

Any idea how to work around this?

Thank you very much in advance!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呆萌少年 2025-01-20 17:57:42

如果错误显示它是“TimeDelta”,那么您必须询问 delta 相对于什么?通常,TimeDelta 表示“三小时”或“减去两天”之类的内容。您说您希望输出为“12:30:00”,这是实际时间还是意味着 12 小时 30 分钟,没有秒?

您可以尝试使 TimeDelta 相对于“时间的开始”,以便它是一个可以导入到 xlwings 中的日期,但格式类似于建议的时间 此处

If the error says it's a "TimeDelta", then you have to ask delta relative to what? Usually a TimeDelta indicates something like "three hours" or "minus two days". You say you'd like the output to be "12:30:00" is that an actual time or does it mean 12 hours 30 minutes and no seconds?

You could try making the TimeDelta relative to "the beginning of time" so that it's a date which can be imported into xlwings but is formatted like a time as suggested here.

计㈡愣 2025-01-20 17:57:42

刚刚设法弄清楚。

诀窍是首先将 timedelta64[ns] 列格式化为字符串,然后使用 .map(lambda x:str(x)[7:])) 对其进行一些修剪,这样我就可以得到很好的结果仅时间标记。

individual_dochazka_zamestnanec['Počet odpracovaných hodin celkem'] = ((individual_dochazka_zamestnanec['Počet odpracovaných hodin celkem']).astype(str)).map(lambda x: str(x)[7:])

令我惊讶的是,Excel 毫无问题地接受了这一点,这正是我所需要的。

希望这有时能对某人有所帮助。

干杯!

Just managed to figure it out.

The trick was to first format timedelta64[ns] columns as string and then trim it a bit with .map(lambda x:str(x)[7:])) so that I would get that nice time only stamp.

individual_dochazka_zamestnanec['Počet odpracovaných hodin celkem'] = ((individual_dochazka_zamestnanec['Počet odpracovaných hodin celkem']).astype(str)).map(lambda x: str(x)[7:])

To my surprise, Excel accepted this without issue which is exactly what I needed.

Hope this helps someone, sometime.

Cheers!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文