pandas - Pandas 比较 - 如何比较 2 个单独数据框中的 2 个日期列
问题描述
我有一次缺少日期的 csv,我创建了一个相同日期范围的新 df,没有缺少日期。我想比较两个 csv 并在原始 csv 中有空白日期的任何地方放置一个 NaN:
例子:
DateTime Measurement Dates
0 2016-10-09 00:00:00 1021.9 2016-10-09
1 2016-10-11 00:00:00 1019.9 2016-10-10
2 2016-10-12 00:00:00 1015.8 2016-10-11
3 2016-10-13 00:00:00 1013.2 2016-10-12
4 2016-10-14 00:00:00 1005.9 2016-10-13
所以我希望新表是:
DateTime Measurement Dates
0 2016-10-09 00:00:00 1021.9 2016-10-09
1 Nan 00:00:00 Nan 2016-10-10
2 2016-10-11 00:00:00 1015.8 2016-10-11
3 2016-10-12 00:00:00 1013.2 2016-10-12
4 2016-10-13 00:00:00 1005.9 2016-10-13
然后我将删除 DateTime 列,因此最终的 df 是缺少测量值的完整日期列表。
到目前为止我使用的代码:
new_dates = pandas.date_range(start = '2016-10-09 00:00:00', end = '2017-10-09 00:00:00')
merged = pandas.merge(measurements, updated_dates,left_index=True, right_index=True)
解决方案
如果我对您的理解正确,您希望将您的DateTime
列重新采样为每日频率并填补空白NaN
:
# Use this line if your DateTime column is not datetime type yet
# df['DateTime'] = pd.to_datetime(df['DateTime'])
dates = pd.date_range(df['DateTime'].min(), df['DateTime'].max(), freq='D')
df = df.set_index('DateTime').reindex(dates).reset_index()
输出
index Measurement
0 2016-10-09 1021.9
1 2016-10-10 NaN
2 2016-10-11 1019.9
3 2016-10-12 1015.8
4 2016-10-13 1013.2
5 2016-10-14 1005.9
如果你有唯一的日期,你也可以使用resample
。如果您的日期不是唯一的,它将聚合它们并取mean
两个日期中的一个:
df.set_index('DateTime').resample('D').mean()
输出
DateTime Measurement
0 2016-10-09 1021.9
1 2016-10-10 NaN
2 2016-10-11 1019.9
3 2016-10-12 1015.8
4 2016-10-13 1013.2
5 2016-10-14 1005.9
推荐阅读
- python-2.7 - ElementTree.tostring(): UnicodeDecodeError:
- python - Python:如何在熊猫数据框中用 NaN 替换空字符串?
- r - 用于索引的 R 管道运算符
- css - 显示字体大小> 1000px的解决方法?
- python - Difference in genfromtxt between Anaconda and Canopy
- python - pipenv:packaging.specifiers.InvalidSpecifier:无效的说明符
- android - 锁定屏幕方向时使用 setRequestedOrientation 时系统 UI 崩溃
- html - 将和标签放入
标签?
- android - 何设置 MPAndroid 饼图无标签
- ada - 如何在 Ada 的嵌套聚合中分配记录