gpt4 book ai didi

python - 从稀疏数据帧填充连续的 Pandas 数据帧

转载 作者:太空狗 更新时间:2023-10-29 16:54:50 25 4
gpt4 key购买 nike

我有一个字典名称 date_dict,由 datetime 日期键入,其值对应于观察的整数计数。我将其转换为稀疏系列/数据框,其中包含我想加入的经过审查的观察结果,或者转换为具有连续日期的系列/数据框。令人讨厌的列表理解是我绕过 pandas 显然不会自动将 datetime 日期对象转换为适当的 DateTime 索引这一事实的技巧。

df1 = pd.DataFrame(data=date_dict.values(),
index=[datetime.datetime.combine(i, datetime.time())
for i in date_dict.keys()],
columns=['Name'])
df1 = df1.sort(axis=0)

此示例有 1258 个观测值,DateTime 索引从 2003 年 6 月 24 日运行到 2012 年 11 月 7 日。

df1.head()
Name
Date
2003-06-24 2
2003-08-13 1
2003-08-19 2
2003-08-22 1
2003-08-24 5

我可以创建一个具有连续 DateTime 索引的空数据框,但这会引入一个不需要的列并且看起来很笨重。我觉得好像我错过了一个涉及连接的更优雅的解决方案。

df2 = pd.DataFrame(data=None,columns=['Empty'],
index=pd.DateRange(min(date_dict.keys()),
max(date_dict.keys())))
df3 = df1.join(df2,how='right')
df3.head()
Name Empty
2003-06-24 2 NaN
2003-06-25 NaN NaN
2003-06-26 NaN NaN
2003-06-27 NaN NaN
2003-06-30 NaN NaN

是否有更简单或更优雅的方法从稀疏数据帧填充连续数据帧,以便 (1) 连续索引,(2) NaN 为 0,以及 (3) 没有剩余的空数据框中的列?

            Name
2003-06-24 2
2003-06-25 0
2003-06-26 0
2003-06-27 0
2003-06-30 0

最佳答案

您可以使用您的日期范围对时间序列使用重新索引。此外,看起来您最好使用 TimeSeries 而不是 DataFrame(请参阅 documentation ),尽管重建索引也是将缺失索引值添加到 DataFrame 的正确方法。

例如,开始于:

date_index = pd.DatetimeIndex([pd.datetime(2003,6,24), pd.datetime(2003,8,13),
pd.datetime(2003,8,19), pd.datetime(2003,8,22), pd.datetime(2003,8,24)])

ts = pd.Series([2,1,2,1,5], index=date_index)

给你一个时间序列,就像你的示例数据框的头部:

2003-06-24    2
2003-08-13 1
2003-08-19 2
2003-08-22 1
2003-08-24 5

简单的做

ts.reindex(pd.date_range(min(date_index), max(date_index)))

然后给你一个完整的索引,你的缺失值用 NaN 表示(如果你想用一些其他值填充缺失值,你可以使用 fillna - 见 here ):

2003-06-24     2
2003-06-25 NaN
2003-06-26 NaN
2003-06-27 NaN
2003-06-28 NaN
2003-06-29 NaN
2003-06-30 NaN
2003-07-01 NaN
2003-07-02 NaN
2003-07-03 NaN
2003-07-04 NaN
2003-07-05 NaN
2003-07-06 NaN
2003-07-07 NaN
2003-07-08 NaN
2003-07-09 NaN
2003-07-10 NaN
2003-07-11 NaN
2003-07-12 NaN
2003-07-13 NaN
2003-07-14 NaN
2003-07-15 NaN
2003-07-16 NaN
2003-07-17 NaN
2003-07-18 NaN
2003-07-19 NaN
2003-07-20 NaN
2003-07-21 NaN
2003-07-22 NaN
2003-07-23 NaN
2003-07-24 NaN
2003-07-25 NaN
2003-07-26 NaN
2003-07-27 NaN
2003-07-28 NaN
2003-07-29 NaN
2003-07-30 NaN
2003-07-31 NaN
2003-08-01 NaN
2003-08-02 NaN
2003-08-03 NaN
2003-08-04 NaN
2003-08-05 NaN
2003-08-06 NaN
2003-08-07 NaN
2003-08-08 NaN
2003-08-09 NaN
2003-08-10 NaN
2003-08-11 NaN
2003-08-12 NaN
2003-08-13 1
2003-08-14 NaN
2003-08-15 NaN
2003-08-16 NaN
2003-08-17 NaN
2003-08-18 NaN
2003-08-19 2
2003-08-20 NaN
2003-08-21 NaN
2003-08-22 1
2003-08-23 NaN
2003-08-24 5
Freq: D, Length: 62

关于python - 从稀疏数据帧填充连续的 Pandas 数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13370525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com