将特定字符串值转换为Pandas

时间:2017-08-04 14:47:58

标签: python pandas dataframe

我有一个名为df的Pandas数据框,其中_type列包含FirstSecond。我想将所有First值转换为1,将所有Second值转换为2.

我应该怎么做?

谢谢!

3 个答案:

答案 0 :(得分:3)

您可以将Series.map与字典一起使用:

df['_type'] = df['_type'].map({'First': 1, 'Second': 2})

实施例

df = pd.DataFrame({
        '_type': ['First', 'Second', 'First', 'Second']
    })

df
#   _type
#0  First
#1  Second
#2  First
#3  Second

df['_type'] = df['_type'].map({'First': 1, 'Second': 2})

df
# _type
#0  1
#1  2
#2  1
#3  2

答案 1 :(得分:2)

df.replace有效:

In [10]: df._type.replace(('First', 'Second'), (1, 2), inplace=True); df
Out[10]: 
   _type
0      1
1      2
2      1
3      2 

df.eq(非现场)的另一种可能性:

In [15]: df._type.eq('Second').mul(1) + 1 
Out[15]: 
0    1
1    2
2    1
3    2
Name: _type, dtype: int64

您还可以使用np.where

In [28]: pd.Series(np.where(df._type == 'First', 1, 2)).to_frame('_type')
Out[28]: 
   _type
0      1
1      2
2      1
3      2

答案 2 :(得分:1)

我的解决方案来自于我使用factor在R中实现它。

在python中pandas应为category

df = pd.DataFrame({'_type': ['First', 'Second', 'First', 'Second']})
df['_type'].astype('category').cat.codes.add(1)  


Out[706]: 
0    1
1    2
2    1
3    2
dtype: int8