我有从hdf5文件导入的数据.所以,它看起来像这样:
import pandas as pd
tmp=pd.Series([1.,3.,4.,3.,5.],['2016-06-27 23:52:00','2016-06-27 23:53:00','2016-06-27 23:54:00','2016-06-27 23:55:00','2016-06-27 23:59:00'])
tmp.index=pd.to_datetime(tmp.index)
>>>tmp
2016-06-27 23:52:00 1.0
2016-06-27 23:53:00 3.0
2016-06-27 23:54:00 4.0
2016-06-27 23:55:00 3.0
2016-06-27 23:59:00 5.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
我想找到数据的局部斜率.如果我只是做tmp.diff()我会得到本地值的变化.但是,我希望得到每秒值的变化(时间导数)我想做这样的事情,但这是错误的方法,并给出一个错误:
tmp.diff()/tmp.index.diff()
Run Code Online (Sandbox Code Playgroud)
我已经发现我可以通过将所有数据转换为DataFrame来实现,但这似乎效率低下.特别是,因为我将不得不使用大块的磁盘文件.除此之外,还有更好的方法吗?
df=pd.DataFrame(tmp)
df['secvalue']=df.index.astype(np.int64)/1e+9
df['slope']=df['Value'].diff()/df['secvalue'].diff()
Run Code Online (Sandbox Code Playgroud) 我有每15秒一次的数据。但是,缺少一些值。这些没有用NaN标记,但是根本不存在。如何填写这些值?
我已经尝试过重新采样,但这也改变了我的原始数据。所以,为什么这行不通:
a=pd.Series([1.,3.,4.,3.,5.],['2016-05-25 00:00:35','2016-05-25 00:00:50','2016-05-25 00:01:05','2016-05-25 00:01:35','2016-05-25 00:02:05'])
a.index=pd.to_datetime(a.index)
a.resample('15S').mean()
In [368]: a
Out[368]:
2016-05-25 00:00:35 1.0
2016-05-25 00:00:50 3.0
2016-05-25 00:01:05 4.0
2016-05-25 00:01:35 3.0
2016-05-25 00:02:05 5.0
dtype: float64
Run Code Online (Sandbox Code Playgroud)
它向我展示了这一点:
2016-05-25 00:00:30 1.0
2016-05-25 00:00:45 3.0
2016-05-25 00:01:00 4.0
2016-05-25 00:01:15 NaN
2016-05-25 00:01:30 3.0
2016-05-25 00:01:45 NaN
2016-05-25 00:02:00 5.0
Freq: 15S, dtype: float64
Run Code Online (Sandbox Code Playgroud)
因此,我不再拥有00:35或00:50的值。
对于我最初的较大数据集,我还最终在重采样数据的末尾看到了许多大的NaN值。
我想将15s的数据重新采样到15s,所以每当在特定时间内没有数据存在时,都应该使用其周围的值的平均值来填充它。有没有办法做到这一点?
另外,为什么我重新采样时时间基准会改变?我的原始数据始于00:00:35,重新采样后始于00:30?好像它偏移了5秒。
在我的示例数据中,它应该做的所有事情都是在00:01:50创建一个附加数据条目。
编辑
我意识到我的数据比我想象的要复杂一些。实际上,“基础”在其中发生了部分变化。如果我使用下面的解决方案,则它适用于部分数据,但是值停止更改。例如:
a = pd.Series([1.,3.,4.,3.,5.,6.,7.,8.], ['2016-05-25 00:00:35','2016-05-25 00:00:50','2016-05-25 00:01:05','2016-05-25 00:01:35','2016-05-25 00:02:05','2016-05-25 00:03:00','2016-05-25 00:04:00','2016-05-25 00:06:00'])
In [79]: a
Out[79]: …Run Code Online (Sandbox Code Playgroud) 我正在尝试在OpenModelica中开发一种流动的模拟,该流动具有液体或蒸汽的单一物质.Modelica.Media.Water模型确实有两个阶段,但是非常复杂,并且很难为完全不同的物质重现.我想找一个我可以使用的两相介质的简单例子.有一个部分包TemplateMedium和一个部分包PartialTwoPhaseMedium,但我没有看到任何关于如何编写一个全新的介质的例子,它可以是两个阶段中的任何一个.
如果任何人都可以提供一个简单的例子,或者只是一个最小的属性和方程组的列表,这些属性和方程式作为一个起点非常有用.
为了解决评论中的一些问题:我刚刚开始使用这个模型,所以我试图了解Media模型的构建细节,以及模型中包含的具体内容与必须添加的内容每个新媒体.我使用丙烯,所以有很好的数据.这是CoolProp中包含的媒体之一,因此能够使用ExternalMedia和CoolProp非常有用,但我相信这些还没有与OpenModelica一起使用,来自一些评论和错误报告.
我有一些数据,这些数据代表从两个不同的传感器测得的物体的位置。因此,我需要进行传感器融合。更为困难的问题是来自每个传感器的数据实际上是在随机时间到达的。我想使用pykalman来融合和平滑数据。pykalman如何处理可变的时间戳数据?
数据的简化示例如下所示:
import pandas as pd
data={'time':\
['10:00:00.0','10:00:01.0','10:00:05.2','10:00:07.5','10:00:07.5','10:00:12.0','10:00:12.5']\
,'X':[10,10.1,20.2,25.0,25.1,35.1,35.0],'Y':[20,20.2,41,45,47,75.0,77.2],\
'Sensor':[1,2,1,1,2,1,2]}
df=pd.DataFrame(data,columns=['time','X','Y','Sensor'])
df.time=pd.to_datetime(df.time)
df=df.set_index('time')
Run Code Online (Sandbox Code Playgroud)
和这个:
df
Out[130]:
X Y Sensor
time
2017-12-01 10:00:00.000 10.0 20.0 1
2017-12-01 10:00:01.000 10.1 20.2 2
2017-12-01 10:00:05.200 20.2 41.0 1
2017-12-01 10:00:07.500 25.0 45.0 1
2017-12-01 10:00:07.500 25.1 47.0 2
2017-12-01 10:00:12.000 35.1 75.0 1
2017-12-01 10:00:12.500 35.0 77.2 2
Run Code Online (Sandbox Code Playgroud)
对于传感器融合问题,我认为我可以重新调整数据的形状,使位置X1,Y1,X2,Y2具有大量缺失值,而不仅仅是X,Y。(这是相关的:https : //stackoverflow.com/questions/47386426/2-sensor-readings-fusion-yaw-pitch)
因此,我的数据如下所示:
df['X1']=df.X[df.Sensor==1]
df['Y1']=df.Y[df.Sensor==1]
df['X2']=df.X[df.Sensor==2]
df['Y2']=df.Y[df.Sensor==2]
df
Out[132]:
X Y Sensor X1 Y1 X2 Y2
time
2017-12-01 10:00:00.000 10.0 20.0 1 …Run Code Online (Sandbox Code Playgroud) pandas ×3
numpy ×2
python ×2
datetime ×1
modelica ×1
openmodelica ×1
pykalman ×1
simulation ×1