python – 访问dataframe列中值的最佳方法是什么?

比如我有

df=pd.DataFrame({'a':[1,2,3]})
df[df['a']==3].a = 4

这不会将4分配给3

df[df['a']==3] = 4

但这很有效.

它使我对如何分配工作感到困惑.感谢是否有人可以给我一些参考或解释.

最佳答案 您不想使用第二种方法.它返回一个数据帧子切片,并为每一行分配相同的值.

例如,

df

   a  b
0  1  4
1  2  3
2  3  6

df[df['a'] == 3]

   a  b
2  3  6

df[df['a']==3] = 3

df

   a  b
0  1  4
1  2  3
2  3  3

第一种方法不起作用,因为布尔索引返回您尝试分配给的列(系列)的副本,因此赋值失败:

df[df['a'] == 3].a = 4
/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/pandas/core/generic.py:3110: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  self[name] = value

因此,您的选项使用基于索引的.loc(按名称访问)或iloc(按索引访问):

df.loc[df.a == 3, 'a'] = 4

df
   a
0  1
1  2
2  4

如果要传递布尔掩码,则不能使用iloc.

点赞