我已经创建了一个熊猫数据框架

df = DataFrame(index=['A','B','C'], columns=['x','y'])

得到了这个

    x    y
A  NaN  NaN
B  NaN  NaN
C  NaN  NaN

现在,我想给特定的单元格赋值,例如给C行和x列赋值。 我希望得到这样的结果:

    x    y
A  NaN  NaN
B  NaN  NaN
C  10  NaN

下面的代码:

df.xs('C')['x'] = 10

但是df的内容没有改变。数据帧仍然只包含nan。

有什么建议吗?


当前回答

我建议:

df.loc[index_position, "column_name"] = some_value

同时修改多个单元格:

df。loc[start_idx_pos: End_idx_pos, "column_name"] = some_value . loc[start_idx_pos: End_idx_pos, "column_name"] = some_value

其他回答

苏,你的问题是将['x',C]的NaN转换为值10

答案是…

df['x'].loc['C':]=10
df

另一种代码是

df.loc['C', 'x']=10
df

你可以使用。iloc。

df.iloc[[2], [0]] = 10

你也可以使用.loc进行条件查找,如下所示:

df.loc[df[<some_column_name>] == <condition>, [<another_column_name>]] = <value_to_add>

其中<some_column_name是您想要检查<条件>变量的列,<another_column_name>是您想要添加的列(可以是新列,也可以是已经存在的列)。<value_to_add>是您想要添加到该列/行中的值。

这个示例并不能精确地解决当前的问题,但是对于想要根据条件添加特定值的人来说,它可能是有用的。

下面是所有用户提供的有效解决方案的摘要,用于以整数和字符串为索引的数据帧。

df。iloc, df。Loc和df。对于这两种类型的数据帧,df。Iloc仅适用于行/列整数索引df。Loc和df。At支持使用列名和/或整数索引设置值。

当指定的索引不存在时,df。Loc和df。At会将新插入的行/列追加到现有的数据帧,但df。iloc将引发“IndexError:位置索引器越界”。在Python 2.7和3.7中测试的工作示例如下:

import numpy as np, pandas as pd

df1 = pd.DataFrame(index=np.arange(3), columns=['x','y','z'])
df1['x'] = ['A','B','C']
df1.at[2,'y'] = 400

# rows/columns specified does not exist, appends new rows/columns to existing data frame
df1.at['D','w'] = 9000
df1.loc['E','q'] = 499

# using df[<some_column_name>] == <condition> to retrieve target rows
df1.at[df1['x']=='B', 'y'] = 10000
df1.loc[df1['x']=='B', ['z','w']] = 10000

# using a list of index to setup values
df1.iloc[[1,2,4], 2] = 9999
df1.loc[[0,'D','E'],'w'] = 7500
df1.at[[0,2,"D"],'x'] = 10
df1.at[:, ['y', 'w']] = 8000

df1
>>> df1
     x     y     z     w      q
0   10  8000   NaN  8000    NaN
1    B  8000  9999  8000    NaN
2   10  8000  9999  8000    NaN
D   10  8000   NaN  8000    NaN
E  NaN  8000  9999  8000  499.0

从0.21.1版本开始,您还可以使用.at方法。与这里提到的.loc相比有一些不同- pandas .at与.loc,但它在单值替换上更快