替换pandas数据中的某些值?

时间:2013-11-21 13:00:11

标签: python python-2.7 pandas

我正在尝试将“Lobur”替换为“LON”,如下所示:

dcol = data["Location"]
data['Location'] = dcol.str.title().replace("Lobur", "LON")

为什么这不起作用,有谁知道如何正确地做到这一点? (标题部分工作正常)

3 个答案:

答案 0 :(得分:3)

如果要链接字符串方法,则必须插入另一个.str

>>> d = pd.Series(["aaa","bbb","ccc","ddd"])
>>> d
0    aaa
1    bbb
2    ccc
3    ddd
dtype: object
>>> d.str.title()
0    Aaa
1    Bbb
2    Ccc
3    Ddd
dtype: object
>>> d.str.title().str.replace("Cc","RRR")
0     Aaa
1     Bbb
2    RRRc
3     Ddd
dtype: object

这是因为d.str.title()返回Series,但字符串方法位于通过StringMethods获得的.str对象内:

>>> d.str
<pandas.core.strings.StringMethods object at 0x93918ec>

当然,你也可以用两行来完成。

答案 1 :(得分:0)

你可以使用apply:

data['Location'] = data['Location'].apply(lambda x: str(x).title().replace('Lobur','LON')

将lambda函数应用于每个值

如果你想使用更复杂的处理,你也可以在函数中定义它并将该函数作为参数传递给apply(),如下所示:

def process(x):
    x=str(x)
    return x.title().replace('Lobur','LON')

data['Location'] = data['Location'].apply(process)

答案 2 :(得分:0)

我会使用以下方法:

# First get the indexes interesting to you

lobur_indexes = data.index[data['Location'].values == "Lobur"]

# then use them to modify your df

data['Location'].ix[lobur_indexes] = "LON"