使用 last 进行下采样时如何获得 NAN
How to get NAN when downsampling with last
我想对一些时间序列数据进行下采样,给我每个季度的最后一个值:
import numpy as np
import pandas as pd
index = pd.date_range(start='2020', freq='M', periods=6)
data = np.ones(6)
data[4:6] = np.nan
datetime
2020-01-31 1.0
2020-02-29 1.0
2020-03-31 1.0
2020-04-30 1.0
2020-05-31 NaN
2020-06-30 NaN
Freq: M, dtype: float64
我的要求是,如果最后一个值是nan,下采样值也应该是nan,而不是段中最后一个非nan值。
从 4/30 开始,这将是 1.0,我们不希望这样。我们想要第二季度的 NAN。
根据文档,您可以将 .last() 与“min_count”关键字一起使用,但实际上失败了 - pandas 待处理的错误报告。那是除了问题。
datetime.resample('Q').last(min_count=3)
TypeError Traceback (most recent call last)
<ipython-input-15-bd5dfd934676> in <module>
----> 1 datetime.resample('Q').last(min_count=3)
~/miniconda3/lib/python3.7/site-packages/pandas/core/resample.py in g(self, _method, *args, **kwargs)
934
935 def g(self, _method=method, *args, **kwargs):
--> 936 nv.validate_resampler_func(_method, args, kwargs)
937 return self._downsample(_method)
938
~/miniconda3/lib/python3.7/site-packages/pandas/compat/numpy/function.py in validate_resampler_func(method, args, kwargs)
383 )
384 else:
--> 385 raise TypeError("too many arguments passed in")
386
387
TypeError: too many arguments passed in
在这个问题解决之前,我怎样才能实现我的目标?
可能会进行增强以解决此问题:
Github issue #37768
同时,这里有一个解决方法:
df = pd.DataFrame(datetime,columns =['data'])
df.fillna(1234.56789, inplace=True) # unique and not in your data
df2 = df.resample('Q').last()
df2['data']=np.where(df2['data']==1234.56789,
np.nan,
df2['data'])
df2
data
2020-03-31 1.0
2020-06-30 NaN
我想对一些时间序列数据进行下采样,给我每个季度的最后一个值:
import numpy as np
import pandas as pd
index = pd.date_range(start='2020', freq='M', periods=6)
data = np.ones(6)
data[4:6] = np.nan
datetime
2020-01-31 1.0
2020-02-29 1.0
2020-03-31 1.0
2020-04-30 1.0
2020-05-31 NaN
2020-06-30 NaN
Freq: M, dtype: float64
我的要求是,如果最后一个值是nan,下采样值也应该是nan,而不是段中最后一个非nan值。 从 4/30 开始,这将是 1.0,我们不希望这样。我们想要第二季度的 NAN。
根据文档,您可以将 .last() 与“min_count”关键字一起使用,但实际上失败了 - pandas 待处理的错误报告。那是除了问题。
datetime.resample('Q').last(min_count=3)
TypeError Traceback (most recent call last)
<ipython-input-15-bd5dfd934676> in <module>
----> 1 datetime.resample('Q').last(min_count=3)
~/miniconda3/lib/python3.7/site-packages/pandas/core/resample.py in g(self, _method, *args, **kwargs)
934
935 def g(self, _method=method, *args, **kwargs):
--> 936 nv.validate_resampler_func(_method, args, kwargs)
937 return self._downsample(_method)
938
~/miniconda3/lib/python3.7/site-packages/pandas/compat/numpy/function.py in validate_resampler_func(method, args, kwargs)
383 )
384 else:
--> 385 raise TypeError("too many arguments passed in")
386
387
TypeError: too many arguments passed in
在这个问题解决之前,我怎样才能实现我的目标?
可能会进行增强以解决此问题: Github issue #37768
同时,这里有一个解决方法:
df = pd.DataFrame(datetime,columns =['data'])
df.fillna(1234.56789, inplace=True) # unique and not in your data
df2 = df.resample('Q').last()
df2['data']=np.where(df2['data']==1234.56789,
np.nan,
df2['data'])
df2
data
2020-03-31 1.0
2020-06-30 NaN