好的,这是一个分两个步骤的问题。
第一步:我有一个熊猫数据帧,如下所示:
date time value
0 20100201 0 12
1 20100201 6 22
2 20100201 12 45
3 20100201 18 13
4 20100202 0 54
5 20100202 6 12
6 20100202 12 18
7 20100202 18 17
8 20100203 6 12
...
如您所见,例如,第7行和第8行之间缺少数据(在本例中,为0时间的值)。有时,可能会错过几个小时甚至一整天。
我想把这个DataFrame转换成这样的格式:
value
2010-02-01 00:00:00 12
2010-02-01 06:00:00 22
2010-02-01 12:00:00 45
2010-02-01 18:00:00 13
2010-02-02 00:00:00 54
2010-02-02 06:00:00 12
2010-02-02 12:00:00 18
2010-02-02 18:00:00 17
...
我想要这个,因为我有另一个DataFrame(让我们称之为"可靠的DataFrame"),我确信它没有丢失的值。
编辑2016/07/28:研究该问题时,数据帧中似乎也存在重复数据。请参阅解决方案以解决此问题。
第二步:上一步完成后,我想逐行比较"可靠DataFrame"中的索引与缺少值的DataFrame中的索引。
我想添加一行value
NaN,其中第一个DataFrame中缺少条目。最后的检查是确保两个DataFrames具有相同的维度。
我知道这是一个很长的问题,但我很累。我曾尝试使用dateutil.parser.parse
管理日期,并使用set_index
作为设置新索引的方法,但代码中有很多错误。恐怕这显然超出了我的熊猫水平。
提前谢谢。
步骤1答案
df['DateTime'] = (df['date'].astype(str) + ' ' + df['time'].astype(str) +':'+'00'+':'+'00').apply(lambda x: pd.to_datetime(str(x)))
df.set_index('DateTime', drop=True, append=False, inplace=True, verify_integrity=False)
df.drop(['date', 'time'], axis=1, level=None, inplace=True, errors='raise')
如果有重复,可以通过以下方式删除:
df = df.reset_index().drop_duplicates(subset='DateTime',keep='last').set_index('DateTime')
步骤2
df_join = df.join(df1, how='outer', lsuffix='x',sort=True)