好的,这是一个分两个步骤的问题。
第一步:我有一个像这样的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
作为设置新索引的方法,但我在代码中有很多错误。我担心这显然高于我的熊猫水平。
提前谢谢。
答案 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)