2016-07-25 66 views
1

我有一个熊猫数据框,我需要修改给定列中的所有值。每列将包含一个相同长度的字符串值。用户为每个值提供他们想要替换的索引:例如:[1:3]和替换值"AAA"熊猫 - 修改每个单元格中的字符串值

这将替换值为1到3的字符串,值为AAA

如何使用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 

回答

3

使用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 
+0

谢谢你,不知道这个功能... – MaxU

+0

@root - 伟大的答案,是有可能的条件添加到此也就是说,如果位置1是“A”而不是“B”? –

+0

您是否只有一个条件,如if-else语句或多个条件,如if-elif-else语句? – root

1

IMO最简单的解决方案:

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