在Python Pandas中与因子变量最接近的等效变量是什么?

44

1
请查看此链接,似乎他们已经将pandas.Factor添加为因子列。但我认为这并不完全等同,特别是在缺失数据的情况下。 - agstudy
1
https://dev59.com/RWsz5IYBdhLWcg3wj4ra - Stephen
4个回答

45

这个问题似乎是来自一年前的,但由于它仍然开放,这里有一个更新。pandas引入了categorical数据类型,它的操作方式非常类似于R语言中的factors。请参见此链接获取更多信息:

http://pandas-docs.github.io/pandas-docs-travis/categorical.html

下面是从上述链接中复制出来的代码片段,展示了如何在pandas中创建一个“factor”变量。

In [1]: s = Series(["a","b","c","a"], dtype="category")

In [2]: s
Out[2]: 
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a < b < c]

1
截至2022年07月18日,上述链接已经失效。 - Michael Tuchman
新链接:https://pandas.pydata.org/docs/user_guide/categorical.html - undefined

6

如果你想进行建模等操作,patsy库中有很多有用的因子。我承认我自己也曾经苦恼过这个问题。我发现这些幻灯片很有帮助。但愿我能提供更好的例子,但这是我自己所得到的。


1
如果您想像R一样将分类变量映射为数字,Pandas实现了一个函数,可以为您提供这个功能:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.factorize.html
import pandas as pd

df = pd.read_csv('path_to_your_file')
df['new_factor'], _ = pd.factorize(df['old_categorical'], sort=True)


此函数返回枚举映射以及唯一值列表。如果只是进行变量赋值,则必须像上面那样放弃后者。
如果您想要自己的解决方案,可以在函数中使用集合和字典的组合。这种方法在多个列上应用起来更容易,但您必须注意None、NaN等将作为此方法中的类别包含在内。
def factor(var):
    var_set = set(var)
    var_set = {x: y for x, y in [pair for pair in zip(var_set, range(len(var_set)))]}
    return [var_set[x] for x in var]


df['new_factor1'] = df['old_categorical1'].apply(factor)
df[['new_factor2', 'new_factor3']] = df[['old_categorical2', 'old_categorical3']].apply(factor)

-2
C # array containing category data
V # array containing numerical data

H = np.unique(C)
mydict = {}
for h in H:
    mydict[h] = V[C==h]


boxplot(mydict.values(), labels=mydict.keys())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接