Pandas - make a column dtype object or Factor


Question

In pandas, how can I convert a column of a DataFrame into dtype object? Or better yet, into a factor? (For those who speak R, in Python, how do I as.factor()?)

Also, what's the difference between pandas.Factor and pandas.Categorical?

1
42
2/9/2015 9:03:46 PM

Accepted Answer

You can use the astype method to cast a Series (one column):

df['col_name'] = df['col_name'].astype(object)

Or the entire DataFrame:

df = df.astype(object)

Update

Since version 0.15, you can use the category datatype in a Series/column:

df['col_name'] = df['col_name'].astype('category')

Note: pd.Factor was been deprecated and has been removed in favor of pd.Categorical.

59
3/16/2019 1:28:07 PM

Factor and Categorical are the same, as far as I know. I think it was initially called Factor, and then changed to Categorical. To convert to Categorical maybe you can use pandas.Categorical.from_array, something like this:

In [27]: df = pd.DataFrame({'a' : [1, 2, 3, 4, 5], 'b' : ['yes', 'no', 'yes', 'no', 'absent']})

In [28]: df
Out[28]: 
   a       b
0  1     yes
1  2      no
2  3     yes
3  4      no
4  5  absent

In [29]: df['c'] = pd.Categorical.from_array(df.b).labels

In [30]: df
Out[30]: 
   a       b  c
0  1     yes  2
1  2      no  1
2  3     yes  2
3  4      no  1
4  5  absent  0

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon