【发布时间】:2019-05-27 18:01:30
【问题描述】:
我有两个数据集,一个包含空气质量数据,一个包含天气数据,每个数据集都有一个名为“dt”的列,用于表示日期和时间。然而,这些时间并不完全匹配。我想加入这些表,以便保留空气质量数据,并匹配和合并天气数据的最接近时间。
df_aq:
dt Latitude Longitude ... Speed_kmh PM2.5 PM10
0 11/20/2018 12:16 33.213922 -97.151055 ... 0.35 16.0 86.1
1 11/20/2018 12:16 33.213928 -97.151007 ... 5.01 16.0 86.1
2 11/20/2018 12:16 33.213907 -97.150953 ... 5.27 16.0 86.1
3 11/20/2018 12:16 33.213872 -97.150883 ... 5.03 16.0 86.1
...
364 11/20/2018 12:46 33.209462 -97.148623 ... 0.00 2.8 6.3
365 11/20/2018 12:46 33.209462 -97.148623 ... 0.00 2.8 6.3
366 11/20/2018 12:46 33.209462 -97.148623 ... 0.00 2.8 6.3]
df_weather:
USAF WBAN dt DIR SPD ... PCP01 PCP06 PCP24 PCPXX
0 722589 3991 11/20/2018 0:53 360 6 ... 0 ***** ***** *****
1 722589 3991 11/20/2018 1:53 350 6 ... 0 ***** ***** *****
2 722589 3991 11/20/2018 2:53 310 3 ... 0 ***** ***** *****
3 722589 3991 11/20/2018 3:53 330 5 ... 0 ***** ***** *****
4 722589 3991 11/20/2018 4:53 310 6 ... 0 ***** ***** *****
df_aq 的范围为 12:16-12:46,并且 df_weather 在 53 分钟标记处每小时都有数据。因此最接近的时间是 11:53 和 12:53,所以我希望这两个时间和随后的天气数据与 df_aq 上的所有数据适当合并
我尝试过使用 iloc 和 Index.get_loc,因为这似乎是最好的方法,但我不断收到错误。
我试过了:
ctr = df_aq['dt'].count() - 1
startTime = df_aq['dt'][0]
endTime = df_aq['dt'][ctr]
print df_weather.iloc[df_weather.index.get_loc(startTime,method='nearest') or df_weather.index.get_loc(endTime,method='nearest')]
然后我得到一个错误:
TypeError: unsupported operand type(s) for -: 'long' and 'str'
我不确定这个错误是什么意思
有没有比 iloc 更好的方法呢?如果没有,我在这段代码中做错了什么?
非常感谢您提供的任何帮助。
【问题讨论】:
-
检查
pd.merge_asofdocs -
@Shannon 请提供您的数据集的链接。
标签: python pandas datetime join merge