我有这样一行,它将这个单元格的值更改为5:
df[header].at[row_num] = 5
我想知道是否有一个更清晰/更短的方式来引用df[header].at[row_num]
?
在Python中有一个“Set”命令,它可以完成相同的工作,但方式更简单:
# Note..this 'set' command is borrowed from VBA.
# This is not the python 'set' command that applies to sets like {1,2,3}
set my_cell = df[header].at[row_num]
my_cell = 5
在这个例子中,一旦我做了那个delcaration,我就不需要再写这个长代码df[header].at[row_num]
了,因为我可以使用my_cell = 5
来精确地等价于df[header].at[row_num] = 5
3条答案
按热度按时间dsf9zpds1#
在Python中,你不能重载
=
。它不是操作员。您可以创建一个代理对象,该对象包含该框架及其索引,并使用
set()
和get()
方法修改该框架kx7yvsdv2#
使用
loc
,它的工作原理与您的代码相同。如果您想更改
multiple rows
中的值,例如从1到100:如果你想改变
several columns
中值,所有这些列的值将被改变为5,例如'col_1','col_2':如果你想在
col_1
中当它们等于4时将值更改为5:vs3odd8k3#
这是不可能的,也是不可取的。
对此的解释在于电子表格和pandas DataFrames之间的差异。
在电子表格程序中,可以明确引用单元格,Sheet 1中的C3始终是Sheet 1中的C3。
然而,在pandas DataFrame中,许多操作返回输入的副本,这意味着现在您想要引用哪个“Cell”变得不明确。
例如,让我们假设您可以使用
set my_cell = df.at[row_num, header]
:这里应该更新什么?原始对象,仍然由
df_copy
引用?还是在df = df * 2
中重新分配给df
的新对象?这种模糊性将使它成为一个问题和错误的来源,而不是一个有用的工具。
解决方法:标签词典
如果真实的问题是,如果代码中的多个位置发生变化,您不想更新这些位置的索引,那么解决方法可能是使用标签字典->索引。定义索引一次,然后使用标签: