用pandas中的int替换分类字符串

时间:2016-05-15 04:03:29

标签: 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

这就是诀窍但却给出了这个令人讨厌的警告

  

正在尝试在DataFrame

的切片副本上设置值      

请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy           self._setitem_with_indexer(indexer,value)

而且我知道在我最近几次使用熊猫之前我已经看过这个。你能否给出推荐的方法?我的方法给出了理想的结果,但我该怎么办?此外,我认为Python应该是一个'如果它具有逻辑意义并且你输入它将会运行'这种语言,但我的解决方案似乎在人类可读的意义上是完全合乎逻辑的,它似乎非常非pythonic,它会引发错误。

2 个答案:

答案 0 :(得分:0)

试试这个:

function sumRangeXorSubStr(from, to)
{
  var result = 0;

  for(var n=from; n<=to; n++)
    result += sumXorSubStr(n);

  return result;
}

答案 1 :(得分:0)

您可以使用numpy.where。输出为numpy.ndarray,因此您必须使用Series构造函数:

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