如何根据属性数量动态创建字典?

问题描述 投票:1回答:2

我有一个使用Pandas读取的具有6个属性和1个类的CSV文件。

CsvFile = "/path/to/file.csv"
df = pd.read_csv(CsvFile)

我的CSV的前5行:

x,y,x1,y1,x2,y2,class
92,115,120,94,84,102,3
84,102,106,79,84,102,3
84,102,102,83,80,102,3
80,102,102,79,84,94,3
84,94,102,79,80,94,3

由于我有6个属性,所以我想用Python创建一个字典(6个键,每个键5个值),该字典将具有kmeans的质心。

numberOfClusters = 5
centroids =
{
    i+1: [random.uniform(0.0, 255.0), random.uniform(0.0, 255.0),
          random.uniform(0.0, 255.0), random.uniform(0.0, 255.0),
          random.uniform(0.0, 255.0), random.uniform(0.0, 255.0)]
    for i in range(numberOfClusters)
}

问题1:如您所知,为了匹配CSV文件中的属性数,将random.uniform(0.0, 255.0)复制粘贴至我想要获取的随机点的次数不那么有效。 。有没有复制粘贴的方法吗?

以类似的方式,在下面的代码中,我计算了欧几里得距离。

for i in centroids.keys():
    df['distance_from_{}'.format(i)] = (
        np.sqrt(
            (df['x'] - centroids[i][0]) ** 2
            + (df['y'] - centroids[i][1]) ** 2
            + (df['x.1'] - centroids[i][2]) ** 2
            + (df['y.1'] - centroids[i][3]) ** 2
            + (df['x.2'] - centroids[i][4]) ** 2
            + (df['y.2'] - centroids[i][5]) ** 2
        )
    )

问题2:如果我有更多属性,则必须添加更多df['x'] - centroids[i][0]) ** 2,而如果我有更少属性,则删除一个或多个。我如何才能稍微自动化该过程?

不使用scikit的kmeans的原因是我想计算每个群集的权重。

python pandas dataframe dictionary k-means
2个回答
0
投票

如果键数是您可以使用的问题


0
投票

第一个问题:用]替换您的列表>

[random.uniform(0.0, 255.0) for x in range(6)]
© www.soinside.com 2019 - 2024. All rights reserved.