首页 > 解决方案 > 在引用列名和行号时更新数据框的元素

问题描述

我来自 R 背景,并且习惯于使用以下语法从数据框中检索值:

r_dataframe$some_column_name[row_number]

我可以通过以下语法为数据框赋值:

r_dataframe$some_column_name[row_number] <= some_value

或没有箭头:

r_dataframe$some_column_name[row_number] = some_value

例如:

#create R dataframe data
employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c(21000, 23400, 26800)
startdate <- as.Date(c('2010-11-1','2008-3-25','2007-3-14'))
employ.data <- data.frame(employee, salary, startdate)

#print out the name of this employee
employ.data$employee[2]

#assign the name
employ.data$employee[2] <= 'Some other name'

我现在正在学习一些 Python,从我可以看到从 pandas 数据框中检索值的最直接的方法是:

pandas_dataframe['SomeColumnName'][row_number]

我可以看到与 R 的相似之处。

但是,让我感到困惑的是,在修改/分配 pandas 数据框中的值时,我需要将语法完全更改为:

pandas_dataframe.at[row_number, 'SomeColumnName'] = some_value

阅读这段代码需要更多的注意力,因为列名和行号已经改变了顺序。

这是执行这对操作的唯一方法吗?有没有更合乎逻辑的方法来尊重列名和行号顺序的一致使用?

标签: pythonpython-3.xpandasdataframe

解决方案


如果我正确理解您的意思,正如@sammywemmy 提到的,您可以使用.locand.iloc获取/更改任何行和列中的值。
如果数据框行的顺序发生变化,您必须定义index按其索引获取每一行(数据点),即使顺序已更改。
如下所示:

df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])

现在您可以通过其索引获取第一行:

df.loc['a']     # equivalent to df.iloc[0]

推荐阅读