我试图为pandas数据集实现自己的缩放功能。该函数遍历每个列,计算标准偏差和平均值,然后标准化每个值。它被封装为我的CustomScaler
类中的方法:
class CustomScaler:
def __init__(self, df):
self.df = df
self.mean = 0
self.std = 0
def _standardize(self, value):
return (value - self.mean) / self.std
def transform(self):
col_length = self.df.columns.values
for i, column in enumerate(self.df.columns.values):
self.mean = np.mean(self.df[column])
self.std = np.std(self.df[column])
print("Original mean of the column is {}".format(self.mean))
print("Original standard deviation of the column is {}".format(self.std))
try:
self.df[column] = self.df[column].apply(self._standardize)
except ValueError as e:
print(e)
print("Error on column {}".format(column))
print(self.df[column].index)
duplicates = [item for item, count in Counter(self.df[column].index).items() if count > 1]
print(duplicates) # print duplicate indices for debugging
break
return self.df.values
但是,我在其中一个列上收到了ValueError: cannot reindex from a duplicate axis error
(让我们称之为PROBLEM COLUMN
)。在数据集中有明显重复的索引实例 - print(duplicates)
显示至少20-30个索引的列表。
我的问题是为什么只有一列出现错误?如果我使用apply()
迭代列的每一行,是否应该在第一列上抛出此错误?
在other SO posts对类似问题进行一些研究之后,很明显存在重复值。我尝试通过打印每列的self.df[column].index
值来重现此错误,除了PROBLEM_COLUMN
之外,它们看起来是相同的。
Pandas中的一列是否可能拥有与其他列不同的索引集?