python中的Pandas如何将时间戳读取到datetime64? (HDF5)

时间:2018-06-14 14:29:43

标签: c# python pandas datetime hdf5

我在C#上创建一个应用程序,生成一个hdf5文档,其中一行复合数据是一个时间戳(使用unix时间戳),我希望我可以在pandas中加载这个hdf5并加载timestamp列作为datetime64。我已经尝试从pandas创建文件,我看到它创建了具有许多属性的数据集,我认为pandas读取并在读取文件时做一些逻辑来转换它(从pandas创建的文件中的日期时间是也是一个时间戳),我无法弄清楚......

这是我的数据集创建代码和我调查过的一些截图

 public void CriaHDF5Customizado(PackingConfigFile pf)
    {

       // PopulaOPC(pf);

        H5FileId arquivoHDF5 = H5F.create("C:/Users/arthuro/Desktop/timestampteste.h5", H5F.CreateMode.ACC_TRUNC);
        H5GroupId datasetGroup = H5G.create(arquivoHDF5, "Datasets");
        H5GroupId infosGroup = H5G.create(arquivoHDF5, "Informations");
        H5G.close(infosGroup);

        opcSt opHelper = new opcSt();
        opHelper.dt = (Int64)DateTime.Parse("1996-11-9").Subtract(new DateTime(1970, 1, 1,12,00,00, DateTimeKind.Utc)).TotalSeconds;
        opHelper.qlt = (Int64)DateTime.Now.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalSeconds;
        opHelper.vl = 123456.7f;


        int structsize = Marshal.SizeOf(opHelper);
        H5DataTypeId myOPCType = H5T.create(H5T.CreateClass.COMPOUND, structsize);
        H5T.insert(myOPCType, "TimeStamp", 0, new H5DataTypeId(H5T.H5Type.NATIVE_LONG));            
        H5T.insert(myOPCType, "Quality", 8, new H5DataTypeId(H5T.H5Type.NATIVE_LONG));
        H5T.insert(myOPCType, "Value", 16, new H5DataTypeId(H5T.H5Type.NATIVE_FLOAT));

        foreach (BasicVariable bv in pf.basicVariableList.bvList)
        {
            bv.PopulateOPCUA();
            var bvnow = bv;
            var bvNro = pf.basicVariableList.bvList.IndexOf(bv);
            long[] dims = new long[1];
            dims[0] = bv.bvData.Count;
            H5DataSpaceId myDataSpace = H5S.create_simple(1, dims);
            H5DataSetId bvDset = H5D.create(datasetGroup, bv.bvTag, myOPCType, myDataSpace);
            var arrayaux = new List<opcSt>();
            foreach (OPC_UA opc in bv.bvData)
            {
                var aux = new opcSt(opc.timeStamp, opc.quality, (float)opc.data);
                arrayaux.Add(aux);
            }
            H5D.write(bvDset, myOPCType, new H5Array<opcSt>(arrayaux.ToArray()));
            string[] stringteste = { "datetime64" };
            H5DataTypeId attrDt = H5T.copy(H5T.H5Type.C_S1);
            H5T.setSize(attrDt, stringteste[0].Length);
            var longsz = new long[] { 1 };
            var enc = new System.Text.ASCIIEncoding();
            var array1 = enc.GetBytes(stringteste[0]);
            var charArray = new byte[stringteste[0].Length + 1];
            array1.CopyTo(charArray, 0);
            charArray[stringteste[0].Length] = 0;
            H5DataSpaceId atribDS = H5S.create_simple(1, longsz);

            H5AttributeId Attribs = H5A.create(bvDset, "TimeStamp_dtype", attrDt, atribDS);
            H5A.write(Attribs, attrDt, new H5Array<byte>(charArray));

            stringteste[0] = "(lp0L0La.";

            H5T.setSize(attrDt, stringteste[0].Length);
            longsz = new long[] { 1 };
            enc = new System.Text.ASCIIEncoding();
            array1 = enc.GetBytes(stringteste[0]);
            charArray = new byte[stringteste[0].Length + 1];
            array1.CopyTo(charArray, 0);
            charArray[stringteste[0].Length] = 0;
            atribDS = H5S.create_simple(1, longsz);

            H5AttributeId Attribs2 = H5A.create(bvDset, "TimeStamp_kind", attrDt, atribDS);
            H5A.write(Attribs2, attrDt, new H5Array<byte>(charArray));

            stringteste[0] = "N.";

            H5T.setSize(attrDt, stringteste[0].Length);
            longsz = new long[] { 1 };
            enc = new System.Text.ASCIIEncoding();
            array1 = enc.GetBytes(stringteste[0]);
            charArray = new byte[stringteste[0].Length + 1];
            array1.CopyTo(charArray, 0);
            charArray[stringteste[0].Length] = 0;
            atribDS = H5S.create_simple(1, longsz);

            H5AttributeId Attribs3 = H5A.create(bvDset, "TimeStamp_meta", attrDt, atribDS);
            H5A.write(Attribs3, attrDt, new H5Array<byte>(charArray));


            H5S.close(atribDS);
            H5A.close(Attribs);
            H5A.close(Attribs2);
            H5A.close(Attribs3);
            H5D.close(bvDset);
            H5S.close(myDataSpace);
            bv.bvData = new List<OPC_UA>();
        }            

        H5G.close(datasetGroup);
        H5F.close(arquivoHDF5);
    }

Pandas阅读(时间戳和日期时间):

是1-在jupyter笔记本中读取的值(由pandas处理)       2- HDF5文件中的实际值

enter image description here

这些是pandas创建的表的属性(我试图在我的代码中重新创建)

enter image description here

0 个答案:

没有答案