首先让我先了解一下我最终想要达到的目标。我想有一个类具有pandas核心数据框类型的属性。该数据帧包含我想要插入的(x,y)值对。该类的一个实例将主要用于在新的点x给出一个插值。
让我举个例子
拥有pandas数据框
>>> import numpy as np
>>> import pandas as pd
>>> import scipy
>>> x = np.arange(0,10)
>>> y1 = np.exp(-x/3.0)
>>> y2 = np.sqrt(x)
>>> df = pd.DataFrame(np.concatenate((y1[:,np.newaxis], y2[:,np.newaxis]),axis=1), index=x)
我想实现插值(线性或立方)列,其中索引是两列的x值。优选的是一种解决方案,其结果是每列的函数(插值器)。
这可以通过
实现>>> f = [scipy.interpolate.interp1d(df.index, df.iloc[:, i], kind='linear') for i in range(2)]
这给了我一个内插器列表。但是,我的最终目标是我有一个班级
class Test:
def __init__(self, df):
self.df = df
self._intep = [scipy.interpolate.interp1d(df.index,df.iloc[:, i], kind='linear') for i in range(len(df.columns))]
def __getitem__(self, pos):
x, y = pos
col = self.df.columns[y]
l = [self._intep[i](x) for i in range(len(col))]
return np.column_stack(l)
使用这个我可以很好地做类似
的事情t = Test(df)
t[[1, 2, 4], :]
这是我的最终目标。我想像数组一样访问类,并为特定列提供所需的值。它应该非常快速和优化。如果我的专栏有名字怎么办?那么我似乎需要一个字典而不是内插器容器的列表
在python中这是正确的做法吗?我对python很新,对我来说感觉有点难看:)。