การประทับเวลาใน Numpy

Nov 07 2020

ฉันพยายามดึงข้อมูลจากไฟล์ netcdf โดยใช้ wrf-python ข้อมูลเป็นทุกชั่วโมง วันที่จะถูกดึงออกมาเป็นตัวเลขไม่ใช่ปฏิทิน - วันที่ - เวลา ก่อนอื่นฉันแยกข้อมูลแปลงเป็นอาร์เรย์ np แบบแบนจากนั้นลองบันทึกไฟล์ รูปแบบถูกบันทึกเป็น "% s"

np.savetxt((stn + 'WRF_T2_T10_WS_WD.csv'), np.transpose(arr2D), %s, delimiter=',', header=headers, comments='')

ดูเหมือนว่า:

แต่ต้องมีลักษณะดังนี้:

ขอบคุณ

คำตอบ

ti7 Nov 07 2020 at 13:53

ตามแบบแผนมักจัดเก็บวันที่เป็นออฟเซ็ตเป็นวินาทีตั้งแต่วันที่ 1 มกราคม 1970

สำหรับกรณีของการแปลงวินาทีคำตอบนี้Python Numpy Loadtxt - Convert unix timestampแนะนำให้แปลงโดยการเปลี่ยนประเภทข้อมูล (ควรมีประสิทธิภาพมากที่สุดเท่าที่จะเป็นไปได้ในการหลบลูปทีละแถวการคัดลอกข้อมูล ฯลฯ )

x = np.asarray(x, dtype='datetime64[s]')

อย่างไรก็ตามE+18postfix บอกเป็นนัยว่าหากคุณมีวันที่จริงๆการประทับเวลาของคุณจะอยู่ในหน่วยนาโนวินาทีดังนั้นdatetime64[ns]อาจเหมาะกับคุณ

import time
import numpy as np
>>> a = np.array([time.time() * 10**9])  # epoch seconds to ns
>>> a  # example array
array([1.60473147e+18])
>>> a = np.asarray(a, dtype='datetime64[ns]')
>>> a
array(['2020-11-07T06:44:29.714103040'], dtype='datetime64[ns]')