如何修改 pandas DataFrame 中的单元格?
Posted
技术标签:
【中文标题】如何修改 pandas DataFrame 中的单元格?【英文标题】:How to modify cells in a pandas DataFrame? 【发布时间】:2016-12-26 08:06:38 【问题描述】:我需要更改 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.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
【讨论】:
【参考方案2】:您可以使用.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
【讨论】:
以上是关于如何修改 pandas DataFrame 中的单元格?的主要内容,如果未能解决你的问题,请参考以下文章
使用 For 循环修改 Pandas 中的 DataFrame 字典
如何用pandas将某列进行唯一编码后,修改原dataframe
如何在迭代时修改 pandas DataFrame 的特定单元格?