我想将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]), ...}
答案 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')
我希望这就是你要找的东西。