Pandas - 修改每个单元格中的字符串值

4
我有一个pandas数据框,需要修改给定字符串列中的所有值。每列都包含相同长度的字符串值。用户提供他们想要替换每个值的索引 例如:[1:3]和替换值"AAA"。这将用值AAA替换从值1到3的字符串。
我如何使用applymap()map()apply()函数来完成此操作?
解决方案:以下是我使用下面标记的答案得出的最终解决方案:
import pandas as pd

df = pd.DataFrame({'A':['ffgghh','ffrtss','ffrtds'],
                     #'B':['ffrtss','ssgghh','d'],
                     'C':['qqttss',' 44','f']})
print df
old = ['g', 'r', 'z']
new = ['y', 'b', 'c']
vals = dict(zip(old, new))

pos = 2
for old, new in vals.items():
    df.ix[df['A'].str[pos] == old, 'A'] = df['A'].str.slice_replace(pos,pos + len(new),new)
print df
2个回答

15

使用str.slice_replace函数:

df['B'] = df['B'].str.slice_replace(1, 3, 'AAA')

示例输入:

   A         B
0  w   abcdefg
1  x   bbbbbbb
2  y   ccccccc
3  z  zzzzzzzz

示例输出:

   A          B
0  w   aAAAdefg
1  x   bAAAbbbb
2  y   cAAAcccc
3  z  zAAAzzzzz

@root - 很好的回答,是否也可以添加一个条件,例如如果位置1是“A”,则替换为“B”? - code base 5000
你只有一个条件,比如if-else语句,还是多个条件,比如if-elif-else语句? - root
@root multiple: 例如,假设值为“abcdef”。如果值为['a','b','c'],则需要替换字符串中的第3个位置以匹配['d','e','f'],其中列表1的索引0与列表2中的替换值匹配。 - code base 5000

3

我认为最直接的解决方案是:

In [7]: df
Out[7]:
        col
0   abcdefg
1   bbbbbbb
2   ccccccc
3  zzzzzzzz

In [9]: df.col = df.col.str[:1] + 'AAA' + df.col.str[4:]

In [10]: df
Out[10]:
        col
0   aAAAefg
1   bAAAbbb
2   cAAAccc
3  zAAAzzzz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接