我需要更改DataFrame中的各个元素。我尝试过做这样的事情,但它不起作用:
{{1}}
我该怎么做?
答案 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