我想要一个由数值组成的数据框,该数值根据值是负数、零还是正数转换为三个特定符号。此外,检查应该受到一个 epsilon 值的影响,以控制什么被认为是零。
csv = pd.read_csv('filename.csv')
df = csv.iloc[:, :].diff()
df = df.iloc[1:,:] # remove the first row of nans
我尝试了以下
neg = df < -eps
zer = abs(df) <= eps
pos = df > eps
df[neg] = 'neg'
df[zer] = 'zer'
df[pos] = 'pos'
这工作了一段时间,但是当eps达到一定的值时,抛出了以下错误TypeError: Cannot do inplace boolean setting on mixed-types with a non np.nan value
然后我尝试了以下方法:
df.transform(lambda x: ('neg' if x < -eps else 'zer') if abs(x) <= eps else 'pos')
产生的错误ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index 0')
我有两个问题:
- 为什么我只有在
eps变大时才会收到 TypeError,但适用于例如eps = 0? - 如何进行这种转换?