准备要比较的数据框。索引操作,日期时间及以后

时间:2016-07-27 12:51:00

标签: python datetime pandas

好的,这是一个分两个步骤的问题。

第一步:我有一个像这样的pandas DataFrame:

         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中缺少条目。最后的检查是确保两个DataFrame具有相同的维度。

我知道这是一个很长的问题,但我已经堆积了。我曾尝试使用dateutil.parser.parse管理日期,并使用set_index作为设置新索引的方法,但我在代码中有很多错误。我担心这显然高于我的熊猫水平。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

第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)