我是Pandas的新手,有统计学背景,我正在努力解决一个概念问题:Pandas有列,列包含值。但有时值有特殊的含义-在SPSS或R等统计程序中称为“值标签”。假设列rain具有两个值0(意思是:no rain)和1(意思是:* 下雨 *)。有没有一种方法可以将这些标签分配给这些值?有没有办法在Pandas身上也做到这一点?主要用于电镀和可视化目的。
rain
0
1
iih3973s1#
不需要再使用map了。从0.15版本开始,Pandas允许其列的分类数据类型。存储的数据占用更少的空间,对它的操作更快,并且可以使用标签。我从pandas文档中举了一个例子:
map
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']}) #Recast grade as a categorical variable df["grade"] = df["raw_grade"].astype("category") df["grade"] #Gives this: Out[124]: 0 a 1 b 2 b 3 a 4 a 5 e Name: grade, dtype: category Categories (3, object): [a, b, e]
您还可以重命名类别和添加缺少的类别
n53p2ov02#
你可以有一个单独的字典,将值Map到标签:
d={0:"no rain",1:"raining"}
然后你就可以通过
df.rain_column.apply(lambda x:d[x])
dkqlctbz3#
Map是很好的,如果你没有catgories烘焙到dataframe。
rainCategories = {1: "raining", 0: "no rain"} dfRain = pd.DataFrame({"RainFall":[0,1,1,1,0],"day":["M","T","W","R","F"]}) dfRain["rainFall"].map(rainCategories).value_counts()
产出:
RainFall raining 3 no rain 2 Name: count, dtype: int64
3条答案
按热度按时间iih3973s1#
不需要再使用
map
了。从0.15版本开始,Pandas允许其列的分类数据类型。存储的数据占用更少的空间,对它的操作更快,并且可以使用标签。我从pandas文档中举了一个例子:
您还可以重命名类别和添加缺少的类别
n53p2ov02#
你可以有一个单独的字典,将值Map到标签:
然后你就可以通过
dkqlctbz3#
Map是很好的,如果你没有catgories烘焙到dataframe。
产出: