Pysolar get_azimuth 函数应用于 pandas DataFrame
Pysolar get_azimuth function applied to pandas DataFrame
我得到了一个 pandas
数据框,其中包含纬度、经度(整数类型)列和日期列(datetime64[ns, UTC]
- 根据函数的需要)。我使用以下行来生成新的太阳方位角列:
daa['azimuth'] = daa.apply(lambda row: get_azimuth(row['latitude'], row['longitude'], row['date']), axis=1)
它崩溃了,我不知道为什么,我唯一知道的是日期有问题:
File "pandas\_libs\tslibs\timestamps.pyx", line 1332, in pandas._libs.tslibs.timestamps.Timestamp.__new__
TypeError: an integer is required
如果有人知道我应该如何处理日期,那就太好了,谢谢。
这可以追溯到 pandas
中的错误,请参阅 issue #32174。 pysolar.solar.get_azimuth
调用给定日期时间对象(或 pd.Timestamp)的 .utctimetuple()
方法,但失败:
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 日期时间对象来解决问题,utctimetuple
是否按预期工作。对于给定的示例,您可以使用
daa.apply(lambda row: get_azimuth(row['latitude'], row['longitude'], row['date'].to_pydatetime()), axis=1)
我得到了一个 pandas
数据框,其中包含纬度、经度(整数类型)列和日期列(datetime64[ns, UTC]
- 根据函数的需要)。我使用以下行来生成新的太阳方位角列:
daa['azimuth'] = daa.apply(lambda row: get_azimuth(row['latitude'], row['longitude'], row['date']), axis=1)
它崩溃了,我不知道为什么,我唯一知道的是日期有问题:
File "pandas\_libs\tslibs\timestamps.pyx", line 1332, in pandas._libs.tslibs.timestamps.Timestamp.__new__
TypeError: an integer is required
如果有人知道我应该如何处理日期,那就太好了,谢谢。
这可以追溯到 pandas
中的错误,请参阅 issue #32174。 pysolar.solar.get_azimuth
调用给定日期时间对象(或 pd.Timestamp)的 .utctimetuple()
方法,但失败:
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 日期时间对象来解决问题,utctimetuple
是否按预期工作。对于给定的示例,您可以使用
daa.apply(lambda row: get_azimuth(row['latitude'], row['longitude'], row['date'].to_pydatetime()), axis=1)