如何在Python中连接2个数据帧并在结果中保留NAN?
我有一个数据帧,它缺少数据的时间索引,我希望将其上采样到15分钟的间隔,并在上采样点保持NAN。你知道怎么做吗?其思想是用正确的timeseries索引构建一个空数据帧,然后用好的值填充它们。 以下是一个玩具数据集示例:如何在Python中连接2个数据帧并在结果中保留NAN?,python,pandas,dataframe,nan,Python,Pandas,Dataframe,Nan,我有一个数据帧,它缺少数据的时间索引,我希望将其上采样到15分钟的间隔,并在上采样点保持NAN。你知道怎么做吗?其思想是用正确的timeseries索引构建一个空数据帧,然后用好的值填充它们。 以下是一个玩具数据集示例: 将熊猫作为pd导入 df_数据={“A”:{“150322700000”:0.3,“15032286000”:0.64,“1503232200000”:0.54,“1503234000000”:0.7,“1503237600000”:0.78},“B”:{“1503227000
将熊猫作为pd导入
df_数据={“A”:{“150322700000”:0.3,“15032286000”:0.64,“1503232200000”:0.54,“1503234000000”:0.7,“1503237600000”:0.78},“B”:{“150322700000”:0.46,“150322860000”:0.52,“1503232200000”:0.54,“1503234000000”:0.58,“1503237600000”:0.58},“C”:{“150322700000”:0.04,“150322600000”:0.04,“150323400000”:150320000;“323400000”:15076000:“15076000”:15076000:”D:“15076000:”{"1503227700000":0.0,"1503228600000":0.0,"1503232200000":0.0,"1503234000000":0.0,"1503237600000":0.0}}'
左
出[1]:
A、B、C、D
2017-08-20 11:15:00 0.30 0.46 0.04 0
2017-08-20 11:30:00 0.64 0.52 0.04 0
2017-08-20 12:30:00 0.54 0.54 0.00 0
2017-08-20 13:00:00 0.70 0.58 0.10 0
2017-08-20 14:00:00 0.78 0.58 0.00 0
时间参考=pd.日期范围(开始时间=2017-08-20 11:15:00',结束时间=2017-08-20 14:00:00',频率=15分钟)
df_right=pd.DataFrame(索引=time_ref,列=['A','B','C','D'])
对
出[54]:
A、B、C、D
2017-08-20 11:15:00楠楠
2017-08-20 11:30:00楠楠
2017-08-20 11:45:00楠楠
2017-08-20 12:00:00楠楠
2017-08-20 12:15:00楠楠
2017-08-20 12:30:00楠楠
2017-08-20 12:45:00楠楠
2017-08-20 13:00:00楠楠
2017-08-20 13:15:00楠楠
2017-08-20 13:30:00楠楠
2017-08-20 13:45:00楠楠
2017-08-20 14:00:00楠楠
我想加入这些,这样我就有了这样一个数据帧:
df_data_join='{“A”:{“150322770000”:0.30,“150322860000”:0.64,“1503229500000”:null,“1503230400000”:null,“1503231300000”:null,“1503232200000”:0.54,“1503233100000”:null,“1503234000000”:0.70,“1503234900000”:null,“1503235800000”:null,“1503236700000”:null,“1503237600000”:0.78},“B”:{“150322770000”:0.46,“150322600000”:0:0.52,”1503229500000:null,“1503230400000”:null,“1503231300000”:null,“1503232200000”:0.54,“1503233100000”:null,“1503234000000”:0.58,“1503234900000”:null,“1503235800000”:null,“1503236700000”:null,“1503237600000”:0.58},“C”:{“150322700000”:0.04,“150322860000”:0.04,“15032229500000”:null,“1503230400000”:null,“1503231300000”:null1503232200000:0.00,“1503233100000”:空,“1503234000000”:0.10,“1503234900000”:空,“1503235800000”:空,“1503236700000”:空,“1503237600000”:0.00},“D”:{“150322700000”:0,“150322860000”:0,“15032229500000”:空,“1503230400000”:空,“1503231300000”:空,“1503232200000”:0,“1503233100000”:空,“1503234000000”:0,“1503234900000”:空1503235800000:null,“1503236700000”:null,“1503237600000”:0}
df_join=pd.read_json(df_data_join)
df_连接
出[10]:
A、B、C、D
2017-08-20 11:15:00 0.30 0.46 0.04 0.0
2017-08-20 11:30:00 0.64 0.52 0.04 0.0
2017-08-20 11:45:00楠楠
2017-08-20 12:00:00楠楠
2017-08-20 12:15:00楠楠
2017-08-20 12:30:00 0.54 0.54 0.00 0.0
2017-08-20 12:45:00楠楠
2017-08-20 13:00:00 0.70 0.58 0.10 0.0
2017-08-20 13:15:00楠楠
2017-08-20 13:30:00楠楠
2017-08-20 13:45:00楠楠
2017-08-20 14:00:00 0.78 0.58 0.00 0.0
我尝试过合并、合并、替换、插值、上采样,但都没有达到目的。我需要数据帧中的NaN,以便在以后的处理中确定数据未填充的位置
非常感谢您的帮助。您可以直接在缺少时间索引的数据上使用,例如:
print (pd.read_json(df_data).resample('15T').asfreq())
A B C D
2017-08-20 11:15:00 0.30 0.46 0.04 0.0
2017-08-20 11:30:00 0.64 0.52 0.04 0.0
2017-08-20 11:45:00 NaN NaN NaN NaN
2017-08-20 12:00:00 NaN NaN NaN NaN
2017-08-20 12:15:00 NaN NaN NaN NaN
2017-08-20 12:30:00 0.54 0.54 0.00 0.0
2017-08-20 12:45:00 NaN NaN NaN NaN
2017-08-20 13:00:00 0.70 0.58 0.10 0.0
2017-08-20 13:15:00 NaN NaN NaN NaN
2017-08-20 13:30:00 NaN NaN NaN NaN
2017-08-20 13:45:00 NaN NaN NaN NaN
2017-08-20 14:00:00 0.78 0.58 0.00 0.0
如果你绝对想使用
df_right
,那么使用df_left
也可以使用df_right。fillna(df_left)
哦,我的上帝……多么优雅。非常感谢。