首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python中的时空插值

python中的时空插值
EN

Stack Overflow用户
提问于 2019-06-03 23:06:35
回答 1查看 1.1K关注 0票数 0

我是使用Python的新手,所以我需要帮助。

我有四个列的两个DataFrame中的数据:纬度、经度、日期时间和温度。

在DataFrame df2中,我有纬度、经度和日期时间,并且我需要使用df1中的数据来插值温度。

我需要使用坐标和日期时间数据进行插值,但我不知道如何做到这一点。

DataFrame示例:

df1:

代码语言:javascript
复制
lat     |    lon   |      Datetime         | temp
---------------------------------------------------
15.13   |  38.52   |  2019-03-09 16:05:07  |   23

12.14   |  37.536  |  2019-03-15 09:50:07  |   22

13.215  |  39.86   |  2019-03-09 11:03:47  |   21

11.1214 |  38.536  |  2019-03-10 16:41:18  |   22

12.14   |  37.536  |  2019-03-09 06:15:27  |   19

df2:

代码语言:javascript
复制
lat     |     lon    |     Datetime           
---------------------------------------------
13.13   |   38.82    |   2019-03-06 04:05:07    
11.14   |   36.36152 |  2019-03-15 19:51:07      
10.214  |   39.123   |   2019-03-19 11:01:08    
12.14   |   37.536   |   2019-03-10 16:15:27    

我需要使用哪种方法或函数?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-04 04:22:09

处理时间插值的最好方法是将过去参考点的时间转换为总秒数。然后,您可以插值所有的值,就像它们是浮点数一样。

以下是您的输入数据帧df1和df2:

代码语言:javascript
复制
df1 = pd.DataFrame({'lat':[15.13,12.14,13.215,11.1214,12.14], 
              'lon': [38.52, 37.536,39.86,38.536,37.536],
              'Datetime': pd.to_datetime(['2019-03-09 16:05:07','2019-03-15 09:50:07','2019-03-09 11:03:47','2019-03-10 16:41:18','2019-03-09 06:15:27']),
              'temp':[23,22,21,22,19]})


df2 = pd.DataFrame({'lat':[13.13,11.14,10.214,12.14], 
              'lon': [38.82, 36.36152,39.123,37.536],
              'Datetime': pd.to_datetime(['2019-03-06 04:05:07 ','2019-03-15 19:51:07','2019-03-19 11:01:08','2019-03-10 16:15:27'])})

以下是如何将时间转换为浮点数,基于过去参考点的秒数:

代码语言:javascript
复制
df1['seconds'] = df1.Datetime.apply(lambda x: (pd.to_datetime(x)-pd.to_datetime('2019-03-01 00:00:00')).total_seconds())
df2['seconds'] = df2.Datetime.apply(lambda x: (pd.to_datetime(x)-pd.to_datetime('2019-03-01 00:00:00')).total_seconds())

最后,您可以使用scipy或任何其他包中的插值函数,使用经度、经度和秒数列进行插值(请注意,df2中的一些点超出了df1中定义的范围,因此得到的是nans ):

代码语言:javascript
复制
from scipy.interpolate import griddata

griddata((df1.loc[:,['lat','lon','seconds']].values),
         df1.iloc[:,3].values,
         (df2.iloc[:,[0,1,3]].values))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56430069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档