Python 在pandas中用int替换分类字符串

Python 在pandas中用int替换分类字符串,python,pandas,categorical-data,Python,Pandas,Categorical Data,我有一个包含如下数据的系列 0 a 1 ab 2 b 3 a 我想将任何包含“b”的行替换为1,将所有其他行替换为0。我试过了 one = labels.str.contains('b') zero = ~labels.str.contains('b') labels.ix[one] = 1 labels.ix[zero] = 0 这确实起到了作用,但它给出了一个令人讨厌的警告 试图在数据帧切片的副本上设置值 请参阅文档中的注意事项: self.\u setitem\u和索引器(索引器,值

我有一个包含如下数据的系列

0 a
1 ab
2 b
3 a
我想将任何包含“b”的行替换为1,将所有其他行替换为0。我试过了

one  = labels.str.contains('b')
zero = ~labels.str.contains('b')
labels.ix[one] = 1
labels.ix[zero] = 0
这确实起到了作用,但它给出了一个令人讨厌的警告

试图在数据帧切片的副本上设置值

请参阅文档中的注意事项: self.\u setitem\u和索引器(索引器,值)

我知道在过去的几次使用熊猫时,我已经看到了这一点。你能给出推荐的方法吗?我的方法给出了期望的结果,但是我应该怎么做呢?此外,我认为Python应该是一种“如果它有逻辑意义,并且您键入它,它将运行”的语言,但我的解决方案在人类可读的意义上似乎完全合乎逻辑,并且它抛出错误似乎非常不符合Python。

尝试以下方法:

ds = pd.Series(['a','ab','b','a'])
ds
0     a
1    ab
2     b
3     a
dtype: object

ds.apply(lambda x: 1 if 'b' in x else 0)
0    0
1    1
2    1
3    0
dtype: int64
你可以用。输出为
numpy.ndarray
,因此必须使用
系列
构造函数:

import pandas as pd
import numpy as np

ser = pd.Series(['a','ab','b','a'])
print ser
0     a
1    ab
2     b
3     a
dtype: object

print np.where(ser.str.contains('b'),1,0)
[0 1 1 0]

print type(np.where(ser.str.contains('b'),1,0))
<type 'numpy.ndarray'>

print pd.Series(np.where(ser.str.contains('b'),1,0), index=ser.index)

0    0
1    1
2    1
3    0
dtype: int32 
将熊猫作为pd导入
将numpy作为np导入
ser=pd.系列(['a','ab','b','a'])
打印服务器
0 a
1 ab
2 b
3A
数据类型:对象
打印np.where(序列号str.contains('b'),1,0)
[0 1 1 0]
打印类型(np.where(ser.str.contains('b'),1,0))
打印pd.系列(np.其中(序列号str.contains('b'),1,0),索引=序列号索引)
0    0
1    1
2    1
3    0
数据类型:int32
我没有收到任何警告。“标签”可能是您在问题中未包含的数据帧中的一个片段。这部分很好。您所要做的就是使用布尔索引赋值。