【问题标题】:How to convert a pandas DatetimeIndex to Array of Timestamps?如何将 pandas DatetimeIndex 转换为时间戳数组?
【发布时间】: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


【解决方案1】:

两种方法可能有效:

get_julianDate(timestamp.to_list())
# or use pd.Index.map directly:
timestamp.map(pd.Timestamp.to_julian_date)

【讨论】:

    猜你喜欢
    • 2012-10-12
    • 1970-01-01
    • 2018-06-23
    • 2023-01-25
    • 1970-01-01
    • 2018-03-12
    • 2018-10-09
    • 2014-12-17
    • 1970-01-01
    相关资源
    最近更新 更多