pandas中的值标签?
我对pandas还比较陌生,之前是学统计的,现在遇到一个概念上的问题:pandas有列,这些列里包含了一些值。但有时候,这些值有特别的含义——在像SPSS或R这样的统计程序中,这种情况被称为“值标签”。
想象一下,有一列叫做rain
,里面有两个值0
(表示:没有雨)和1
(表示:正在下雨)。有没有办法把这些标签分配给这些值呢?
在pandas中也能做到这一点吗?主要是为了绘图和可视化的目的。
3 个回答
0
如果你的数据表里没有固定的分类,使用Map会很方便。
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
4
你可以创建一个单独的字典,把值和标签对应起来:
d={0:"no rain",1:"raining"}
然后你可以通过下面的方式来访问这些带标签的数据:
df.rain_column.apply(lambda x:d[x])
6
现在不需要再使用 map
了。从 0.15 版本开始,Pandas 允许在列中使用分类数据类型。这样存储的数据占用更少的空间,处理速度更快,而且你可以使用标签。
我这里举个例子,来自于 pandas 文档:
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]
你还可以重命名分类,或者添加缺失的分类。