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
我没有收到任何警告。“标签”可能是您在问题中未包含的数据帧中的一个片段。这部分很好。您所要做的就是使用布尔索引赋值。