我有一个浮点数类型的日期时间系列。我试图在该系列上应用一个自定义函数来执行滚动窗口操作。我希望此函数返回字符串。然而,这会生成TypeError错误。为什么会产生这个错误?是否有一种方法可以直接使用一个函数来使其正常工作?
以下是一个示例:
import numpy as np
import pandas as pd
np.random.seed(1)
number_series = pd.Series(np.random.randint(low=1,high=100,size=100),index=[pd.date_range(start='2000-01-01',freq='W',periods=100)])
number_series = number_series.apply(lambda x: float(x))
def func(s):
if s[-1] > s[-2] > s[-3]:
return 'High'
elif s[-1] > s[-2]:
return 'Medium'
else:
return 'Low'
new_series = number_series.rolling(5).apply(func)
以下是错误的结果:
TypeError: must be real number, not str
目前我使用的解决方法是修改该函数,使其输出整数序列,然后将另一个函数应用于此序列以生成新序列。示例如下:
def func_float(s):
if s[-1] > s[-2] > s[-3]:
return 1
elif s[-1] > s[-2]:
return 2
else:
return 3
float_series = number_series.rolling(5).apply(func_float)
def func_text(s):
if s == 1:
return 'High'
elif s == 2:
return 'Medium'
else:
return 'Low'
new_series = float_series.apply(func_text)
这将得到最初代码所产生错误的预期结果:
new_series
2000-01-02 Low
2000-01-09 Low
2000-01-16 Low
2000-01-23 Low
2000-01-30 Medium
...
2001-10-28 Low
2001-11-04 Medium
2001-11-11 High
2001-11-18 High
2001-11-25 Low
Length: 100, dtype: object