2014-03-19 104 views
2

我对熊猫相当陌生,来自一个统计背景,我正在努力解决一个概念问题: 熊猫有列,其中包含值。但是有时候,价值观具有特殊的含义 - 在像SPSS或R这样的统计程序中称为“标签”。在熊猫中标记变量?

想象一下有两个值0“无雨”和1“下雨”的列“雨” - 有没有办法将这些标签分配给列?

熊猫也有办法做到这一点吗?主要用于平台和可视化目的。

+0

你想给的值存储为字符串或更高版本分配一些特殊的含义?即使用查找或添加一个将值映射到人类友好值的新列?或者你只是想在你的情节的传说中提供这些信息? – EdChum

+0

@EdChum理想情况下,我根本不需要新的列 - 例如在SPSS中,标签经常用于在表格,图表等中显示数据,但是您可以使用数值作为条件。在我的工作中,我经常有变量,每列有30多个不同的“标签” - 让相关的字符串可见将有很大的帮助(例如,避免“21的含义是什么?” - 问题) –

+0

您可以将它添加为属性这是一般的Python,而不是特定于熊猫和访问它的情节看到相关:http://stackoverflow.com/questions/14688306/adding-meta-information-metadata-to-pandas-dataframe – EdChum

回答

2

访问标记的数据有没有需要使用map了。从版本0.15开始,Pandas允许其列的分类数据类型。 存储的数据占用的空间更少,对其的操作更快,您可以使用标签。

我以一个例子来自pandas docs

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] 

也可以重命名分类并添加缺失类别

+0

感谢您的更新。我会接受它,因为它对新读者来说更为正确 –

3

可以有你一个单独的字典,其值映射到标签:

d={0:"no rain",1:"raining"} 

,然后你可以通过做

df.rain_column.apply(lambda x:d[x]) 
+0

'map'可能更适合这种简单情况 – EdChum

+0

这种情况下的区别是什么? – grasshopper

+3

只有更简单的语法:'df.rain_column.map(d)',或许更快的性能,它取决于数据大小和类型为100行的数据帧,然后“应用”稍微快一点(适用228我们对比地图287us),对于10000行的地图,地图的速度要快26倍(地图是512 us vs应用13 ms) – EdChum