python - 似乎无法将时间戳与 Python 中创建的日期范围相匹配
问题描述
我对编码和尝试将日期时间列与 Pandas 中创建的日期范围合并相对较新。
我正在尝试将已放入 variable的 datetime 列StartDate
(来自 DataFrame )与创建的 DatetimeIndex进行匹配,以便我有一个时间序列。energy
start_dates
timeline
这看起来像这样:
In [1]: start_dates
Out[1]:
0 2016-06-25 00:00:00
1 2016-06-26 00:00:00
2 2016-06-27 00:00:00
rates
是一个带有一系列费率的 DataFrame,我试图通过附加到以下内容来提供特定时间的费率信息start_dates
:
In [2]: rates
Out[2]:
Rate1
0 4.8
1 5.9
2 2.6
我试图将时间戳start_dates
与timeline
.
我已经尝试了所有方法,包括加入、合并、插入、连接、追加和分配,但我无法让两者合并。
我最近的尝试是:
timeline = pd.date_range('2007-03', '2022-06') #231 months
timeline = timeline.to_frame([timeline])
start_dates = energy.loc[:, 'StartDate']
start_dates = datetime.datetime.strptime(first_thous[:, 'StartDate'], '%Y-%m-%d').date()
rates = energy.loc[:, 'Rate1']
start_dates.append(rates)
timeline = timeline.reset_index(drop = True)
timeline.join(start_dates, how = 'inner')
print(timeline)
但是,虽然没有错误,但这些列似乎没有将任何列附加或连接在一起,所以我实际上无法说出它为什么不起作用。
这里发生了什么?
预期的结果是:
In [3]: timeline
Out[3]:
Rate1
0 2016-06-25 4.8
1 2016-06-26 5.9
2 2016-06-27 2.6
解决方案
您可以使用:
energy = pd.DataFrame({'Rate1':[4.8,5.9,2.6],
'StartDate':['2007-02-28 00:00:00',
'2007-03-01 00:00:00',
'2007-03-02 00:00:00']})
print (energy)
Rate1 StartDate
0 4.8 2007-02-28 00:00:00
1 5.9 2007-03-01 00:00:00
2 2.6 2007-03-02 00:00:00
timeline = pd.date_range('2007-03', '2022-06')
print (timeline)
DatetimeIndex(['2007-03-01', '2007-03-02', '2007-03-03', '2007-03-04',
'2007-03-05', '2007-03-06', '2007-03-07', '2007-03-08',
'2007-03-09', '2007-03-10',
...
'2022-05-23', '2022-05-24', '2022-05-25', '2022-05-26',
'2022-05-27', '2022-05-28', '2022-05-29', '2022-05-30',
'2022-05-31', '2022-06-01'],
dtype='datetime64[ns]', length=5572, freq='D')
不要选择列来分隔系列或数据帧。只需转换列StartDate
to_datetime
,然后通过布尔索引isin
过滤:
energy['StartDate'] = pd.to_datetime(energy['StartDate'])
df = energy[energy['StartDate'].isin(timeline)]
print (df)
Rate1 StartDate
1 5.9 2007-03-01
2 2.6 2007-03-02
另一种解决方案:
energy['StartDate'] = pd.to_datetime(energy['StartDate'])
df = pd.DataFrame({'StartDate':timeline}).merge(energy)
print (df)
StartDate Rate1
0 2007-03-01 5.9
1 2007-03-02 2.6
推荐阅读
- javascript - 如何定位谷歌实时数据库中深度嵌套的对象?
- python - Django Rest Framework "myusers" "此字段为必填项
- c - 为什么 netfilter.h 中缺少 nf_hookfn、nf_hook_ops 等的 typedef?
- javascript - 连接客户端和服务器端打字稿项目
- c# - 检查字节数组是否包含另一个字节数组C#的性能方法
- javascript - 如何从 catch 块中的 fetch 获取错误响应正文?
- javascript - JavaScript try catch 代码片段的含义?
- javascript - 引导程序 4 中的完整内容 iframe
- gradle - 如何判断 gradle 插件属性的评估何时会被推迟?
- laravel - 将动态值传递给 Laravel 最大验证规则