2016-07-25 103 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