2016-08-19 29 views
2

我需要更改DataFrame中的各個元素。我試着做這樣的事情,但它不起作用:如何修改pandas DataFrame中的單元格?

for index, row in df.iterrows(): 
    if df.at[row, index] == 'something': 
     df.at[row, index] = df.at[row, index] + 'add a string' 
    else: 
     df.at[row, index] = df.at[row, index] + 'add a value' 

我該怎麼做?

回答

1

如果需要修改所有列在DataFrame使用numpy.whereDataFrame構造,因爲where回報numpy array

df = pd.DataFrame(np.where(df == 'something', df + 'add a string', df + 'add a value'), 
        index=df.index, 
        columns=df.columns) 

如果只有一列col

df['col'] = np.where(df['col'] == 'something', 
        df['col'] + 'add a string', 
        df['col'] + 'add a value') 

樣品:

df = pd.DataFrame({'col': ['a', 'b', 'a'], 'col1': ['a', 'b', 'b']}) 
print (df) 
    col col1 
0 a a 
1 b b 
2 a b 

df = pd.DataFrame(np.where(df == 'a', df + 'add a string', df + 'add a value'), 
        index=df.index, 
        columns=df.columns) 
print (df) 
      col   col1 
0 aadd a string aadd a string 
1 badd a value badd a value 
2 aadd a string badd a value 

df['col'] = np.where(df['col'] == 'a', 
        df['col'] + 'add a string', 
        df['col'] + 'add a value') 

print (df) 
      col col1 
0 aadd a string a 
1 badd a value b 
2 aadd a string b 
+0

如何非常酷,謝謝:) –

1

可以使用.ix和應用這樣的函數:

import pandas as pd 

D = pd.DataFrame({'A': ['a', 'b', 3,7,'b','a'], 'B': ['a', 'b', 3,7,'b','a']}) 

D.ix[D.index%2 == 0,'A'] = D.ix[D.index%2 == 0,'A'].apply(lambda s: s+'x' if isinstance(s,str) else s+1) 

D.ix[D.index[2:5],'B'] = D.ix[D.index[2:5],'B'].apply(lambda s: s+'y' if isinstance(s,str) else s-1) 

第一示例追加x到每個串或備選地增加了1到柱A中的每個非字符串爲每個偶數索引。

第二個示例將y附加到每個字符串或從列B上的每個非字符串中爲索引2,3,4減1。

原始幀:

A B 
0 a a 
1 b b 
2 3 3 
3 7 7 
4 b b 
5 a a 

修正幀:

A B 
0 ax a 
1 b b 
2 4 2 
3 7 6 
4 bx by 
5 a a 
相關問題