首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pysolar get_azimuth函数在pandas DataFrame中的应用

Pysolar get_azimuth函数在pandas DataFrame中的应用
EN

Stack Overflow用户
提问于 2021-10-29 09:30:56
回答 1查看 66关注 0票数 1

我得到了一个包含列纬度、经度(整型)和一个日期列(datetime64[ns, UTC] -根据函数需要)的pandas数据帧。我使用下面的代码行来生成新的太阳方位角列:

代码语言:javascript
运行
复制
 daa['azimuth'] = daa.apply(lambda row: get_azimuth(row['latitude'], row['longitude'], row['date']), axis=1)

它崩溃了,我不知道为什么,我唯一知道的是date中有一个问题:

代码语言:javascript
运行
复制
 File "pandas\_libs\tslibs\timestamps.pyx", line 1332, in pandas._libs.tslibs.timestamps.Timestamp.__new__
 TypeError: an integer is required

如果有人知道我应该怎么处理这个日期,那就太好了,谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-29 10:01:24

这可以追溯到pandas中的一个bug,参见issue #32174pysolar.solar.get_azimuth调用给定datetime对象(或pd.Timestamp)的.utctimetuple()方法,但调用失败:

代码语言:javascript
运行
复制
import pandas as pd

s = pd.to_datetime(pd.Series(["2020-01-01", "2020-01-02"])).dt.tz_localize('UTC')

s.iloc[0]
Out[3]: Timestamp('2020-01-01 00:00:00+0000', tz='UTC')

s.iloc[0].utctimetuple()
Traceback (most recent call last):

  File "<ipython-input-4-f5e393f18fdb>", line 1, in <module>
    s.iloc[0].utctimetuple()

  File "pandas\_libs\tslibs\timestamps.pyx", line 1332, in pandas._libs.tslibs.timestamps.Timestamp.__new__

TypeError: an integer is required

您可以通过将pandas时间戳转换为Python datetime对象来解决此问题,这样utctimetuple就能按预期工作。对于给定的示例,您可以使用

代码语言:javascript
运行
复制
daa.apply(lambda row: get_azimuth(row['latitude'], row['longitude'], row['date'].to_pydatetime()), axis=1)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69766581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档