我认为我的问题涉及一些部分。 我有什么?
最终我想要什么?
到目前为止我尝试了什么?
以下是代码行:
allTheData = pd.concat([gpsDataFrame, no2DataFrame], axis=1)
我是Pandas的新手,也是Python的新手。希望你能帮助我完成这两个步骤:
创建一个dataFrame' allTheData'其中包括按时间顺序排列的所有测量时间(来自gps或No2)和正确的数据。例如,如果两个数据帧中有15:30.05的数据,则只添加一行并包含所有3列;如果在15:30.07只有来自gps的数据包括gps数据并将No2设置为NaN或其他东西。
对数值进行插值,以便我可以选择1秒的间隔,并且每1秒从gps和no2获取插值数据,因此每行。
答案 0 :(得分:2)
使用pandas.resample
调整两个数据帧,使其具有与索引相同的时间戳:
import pandas as pd
import numpy as np
# generate some sample data according to your question
date1 = pd.date_range("14:00", "18:00", freq="3S")
df1 = pd.DataFrame({"time": date1, "gps": np.random.rand(len(date1))})
date2 = pd.date_range("13:30", "18:30", freq="600ms")
df2 = pd.DataFrame({"time": date2, "no2": np.random.rand(len(date2))})
# set the timestamps as index
df1 = df1.set_index("time")
df2 = df2.set_index("time")
final_freq = "1S"
# upsample df1, interpolating
df1 = df1.resample(final_freq)
df1 = df1.interpolate(method='linear') # without this, these entries are NaN
# downsample df2, averaging
df2 = df2.resample(final_freq).mean()
然后你可以join
他们:
df = df1.join(df2)
请注意,如果您的gps位置是单个列中的元组,则可能需要稍微更改一下。在这种情况下,您可能需要将其分为两列(纬度和经度),以便上采样工作。
不是对下采样进行平均,而是使用不同的函数可能是有意义的。例如,如果您的NO2传感器报告它在过去0.6秒内看到的NO2量,那么您需要.sum()
。