自动对数组中的元素进行分类

2024-05-14 12:39:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在建立一个给定地点的植被类型的行程。数据以CSV的形式传递给我,我需要一种方法,可以自动地将一列中的项目重新分类为我提供的更广泛的类。我已经可以用pandas读取数据,做一些整理工作,然后将数据帧写入一个新文件。你知道吗

但是,鉴于我有一个专栏:

species = ['maple', 'oak', holly, 'sawgrass', 'cat tails'...... 'birch']

我希望能够自动地,使用另一个列表,将它们重新分类为广泛的类别,如:

VegClass = ['Tree', 'Bush', 'Grass']

我知道的唯一方法是以类似于以下的方式遍历物种列表:

out = []
for i in species:
    if species[i]=='Oak':
    out.append('Tree')

但是如果物种列表变得非常大的话,这就需要我编写大量的代码,而且我不认为这对于大型数据集是非常有效的。你知道吗

有没有更直接的方法?我知道我需要手动列出所有物种(在单独的类别中),例如:

TreeSpecies = ['oak'....'birch']
GrassSpecies = ['Sawgrass....']

但我只需要做一次就可以建立一个物种名称词典。我期待更多的数据,所以可能不得不添加一个或两个额外的物种名称在未来,但这不会被认为是太耗时,如果我可以处理大量的数据很快。你知道吗


Tags: 数据方法名称tree类型列表物种分类
3条回答

你需要一本像这样的字典

VegClass = {'oak': 'Tree', 'seagrass': 'Grass'}
df['class'] = df['species'].map(VegClass)

我不知道我是否明白你的意思,但既然你必须创建某种关联列表

植物类型

橡树

锯草

kkk |衬套

只需创建一个哈希表并从哈希表中获取类型。 您可以从外部文件中读取表,这样就不会在程序中硬编码。你知道吗

您需要为不同的项创建分类器映射的dict,例如

classifier = {'oak': 'Tree', 
              'maple': 'Tree', 
              'holly': 'Tree', 
              'sawgrass': 'Grass',
              'cat tails': 'Bush', 
              'birch': 'Tree'}

然后获取一列组就很简单了,只需对列调用^{}。你知道吗

>>> df.species.map(classifier)

0     Tree
1     Tree
2     Tree
3    Grass
4     Bush
5     Tree
Name: species, dtype: object

所以你可以用

df['classification'] = df.species.map(classifier)

相关问题 更多 >

    热门问题