如何使用 fill_value 对 Pandas 中的 TimeSeries 重新采样?
Posted
技术标签:
【中文标题】如何使用 fill_value 对 Pandas 中的 TimeSeries 重新采样?【英文标题】:How to resample a TimeSeries in pandas with a fill_value? 【发布时间】:2013-05-24 08:32:51 【问题描述】:我有一个整数 TimeSeries
,我想使用 resample()
对其进行下采样。问题是我有一些缺失数据的时期被转换为NaN
。由于 pandas 不支持Integer NA values,因此整数被转换为浮点数。
是否可以像使用reindex(fill_value=0)
一样使用fill_value
对缺失数据重新采样TimeSeries
?我不希望我的整数转换成浮点数。
>>> dates = (datetime(2013, 1, 1), datetime(2013,1,2), datetime(2013,3,1))
>>> s = Series([1,2,4],index=dates)
>>> s
2013-01-01 1
2013-01-02 2
2013-03-01 4
dtype: int64
>>> s.resample('M', how='sum')
2013-01-31 3
2013-02-28 NaN
2013-03-31 4
Freq: M, dtype: float64
# Desired output (doesn't work)
>>> s.resample('M', how='sum', fill_value=0)
2013-01-31 3
2013-02-28 0
2013-03-31 4
Freq: M, dtype: int64
【问题讨论】:
奇怪的是你的第三个值是 4(索引为 2013-03-01 的那个)。 @waitingkuo 你是对的。修正了复制和粘贴的错字。 【参考方案1】:你可以定义自己的函数来避免NaN
In [36]: def _sum(x):
....: if len(x) == 0: return 0
....: else: return sum(x)
....:
In [37]: s.resample('M', how=_sum)
Out[37]:
2013-01-31 3
2013-02-28 0
2013-03-31 3
Freq: M, dtype: int64
【讨论】:
当然,但这只是从 int 转换为 float,然后再转换为 int。我不想通过将整数转换为浮点数来降低任何精度。 我认为将 int 转换为 float 时没有精度问题。 当您关注演员阵容时,我添加了另一种方法,希望对您有所帮助。 我认为这不是真的:int(float(max_int)) == max_int
其中max_int = np.iinfo(np.int64).max
返回False
使用 pandas 0.18.0,现在有一种更简单、更快捷的方法:s.resample('M').sum().fillna(0)
以上是关于如何使用 fill_value 对 Pandas 中的 TimeSeries 重新采样?的主要内容,如果未能解决你的问题,请参考以下文章
pandas使用reindex函数为日期索引中有缺失日期的dataframe进行索引重置(所有日期都连续)并使用fill_value参数为行进行默认填充
cupy.full() 方法 fill_value 不能带数组?