如何修改pandas DataFrame中的单元格?

时间:2016-08-19 08:22:35

标签: python string pandas dataframe conditional-statements

我需要更改DataFrame中的各个元素。我尝试过做这样的事情,但它不起作用:

{{1}}

我该怎么做?

2 个答案:

答案 0 :(得分:1)

如果需要修改DataFrame中的所有列,请numpy.where使用DataFrame构造函数,因为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

答案 1 :(得分: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附加到每个字符串,或者为每个偶数索引在A列的每个非字符串上添加1。

第二个示例将y附加到每个字符串,或者从列B上的每个非字符串中减去1作为索引2,3,4。

原始框架:

   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