Pandas:使用DataFrame构造函数

时间:2017-03-08 09:41:39

标签: python pandas dataframe

我想将DataFrame列的dtypes初始化为分类类型,并在其创建时指定每个列的类别。

这种方式似乎效率较低,因为我循环了animals两次:

col_name = pd.Categorical([a.name for a in animals], categories=['bird','cat','dog'])
col_food = pd.Categorical([a.food for a in animals], categories=['meat','veggies'])
df = pd.DataFrame({'Animal': col_name, 'Food': col_food})

这种方式似乎更有效,因为我只在animals循环一次但是如何指定分类列的类别?:

df = pd.DataFrame([{'Animal': a.name, 'Food': a.food} for a in animals], 
                  dtype={'Animal': ???, 'Food': ???})

我还想首先避免创建DataFrame,然后将列的类型转换为分类。

像: dtype={'Food': dtype('category', categories=['meat','veggies]), ...}

1 个答案:

答案 0 :(得分:0)

因为你没有放动你的动物类,所以我会使用一个具有名称和食物属性的简单动物。

import pandas as pd

class Animal():
    def __init__(self, name, food):
        self.name = name
        self.food = food

cat = Animal('cat','meat')
bird = Animal('bird', 'veggies')
dog = Animal('dog','meat')

animals = [cat, dog, bird, bird, dog, cat, cat, cat, dog, dog]

df = pd.DataFrame([{'Animal': a.name, 'Food': a.food} for a in animals], dtype=(pd.Categorical))
print(df.Animal.cat.categories)
print(df.Food.cat.categories)

输出是:

Index(['bird', 'cat', 'dog'], dtype='object')
Index(['meat', 'veggies'], dtype='object')

我希望这就是你要找的东西。