【发布时间】:2022-11-21 20:11:57
【问题描述】:
我一直在研究这个问题,但认为我对 pandas 表示日期和时间的各种方式感到困惑。
我导入了一个 csv 数据,其中包括年、月、日等列,然后将其转换为日期时间列,然后将其设置为索引——一切都很好。
# import and name columns
epwNames = ['year','month','day','hour','minute','Datasource','DryBulb {C}','DewPoint {C}','RelHum {%}','Atmos Pressure {Pa}','ExtHorzRad {Wh/m2}','ExtDirRad {Wh/m2}','HorzIRSky {Wh/m2}','GloHorzRad {Wh/m2}','DirNormRad {Wh/m2}','DifHorzRad {Wh/m2}','GloHorzIllum {lux}','DirNormIllum {lux}','DifHorzIllum {lux}','ZenLum {Cd/m2}','WindDir {deg}','WindSpd {m/s}','TotSkyCvr {.1}','OpaqSkyCvr {.1}','Visibility {km}','Ceiling Hgt {m}','PresWeathObs','PresWeathCodes','Precip Wtr {mm}','Aerosol Opt Depth {.001}','SnowDepth {cm}','Days Last Snow','Albedo {.01}','Rain {mm}','Rain Quantity {hr}']
Weather = pd.read_csv(filepath,header=None,skiprows=8,names=epwNames)
# Format timestamp index
Weather['Datetime'] = pd.to_datetime(Weather[['year','month','day','hour']])
Weather.index = Weather['Datetime']
我有另一个使用日期时间的函数,但目前设置为需要一组时间戳 - 这可能是也可能不是最好的方法,但例如我有这样的东西,其中“时间戳”是数组通过:
get_julianDate = np.vectorize(pd.Timestamp.to_julian_date)
julianDay = get_julianDate(timestamp)
如果我通过传入 DateTimeIndex 来运行它,我会收到一个属性错误'numpy.datetime64' 对象没有属性 'year',这看起来很奇怪。不过,如果我通过一系列时间戳,一切都会正常进行。
我尝试了一些简单的转换,比如将 DateTimeIndex 传递给 pd.Timestamp,但我想那太东了。有没有简单的方法可以做到这一点?
【问题讨论】:
-
也许
get_julianDate(timestamp.to_list())就足够了?您也可以直接映射函数:timestamp.map(pd.Timestamp.to_julian_date)。不过,我认为这两者中的任何一个都没有真正使用np.vectorize。 -
啊,是的,转换为列表有效。如果您想将其添加为解决方案,我可以将其标记为正确。我已经用少量元素进行了测试,但我的最终结果将是 8760,所以我可能也会将矢量化与映射函数交换。
-
谢谢,很高兴能帮上忙
标签: python pandas timestamp datetimeindex