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

时间:2017-03-08 22:10:35

标签: python arrays python-3.x pandas

我正在为特定地点建立植被类型的行程。数据作为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....']

但我只需要这样做一次就可以建立一个物种名称字典。我期待更多的数据,因此未来可能需要添加一个或更多的物种名称,但如果我可以快速处理大量数据,这不会被认为太耗时。

3 个答案:

答案 0 :(得分:2)

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

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

然后获取一组论坛就像在列上调用map一样简单。

>>> 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)

答案 1 :(得分:1)

你需要一个像

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

答案 2 :(得分:0)

我不知道我是否关注你,但因为你必须以

的形式创建某种关联列表

植物|输入

橡树|树

sawgrass |草

kkk |衬套

...

只需创建一个哈希表并从哈希表中获取类型。 您可以从外部文件中读取该表,以便在您的程序中不对其进行硬编码。