在引用列名和行号的同时更新数据框的元素

Sco*_*ath 5 python dataframe python-3.x pandas

我有 R 背景,习惯于使用以下语法从数据帧中检索值:

r_dataframe$some_column_name[row_number]
Run Code Online (Sandbox Code Playgroud)

我可以通过以下语法为数据框分配一个值:

r_dataframe$some_column_name[row_number] <= some_value
Run Code Online (Sandbox Code Playgroud)

或没有箭头:

r_dataframe$some_column_name[row_number] = some_value
Run Code Online (Sandbox Code Playgroud)

例如:

#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'
Run Code Online (Sandbox Code Playgroud)

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

pandas_dataframe['SomeColumnName'][row_number]
Run Code Online (Sandbox Code Playgroud)

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

然而,令我困惑的是,当涉及到修改/分配 pandas 数据框中的值时,我需要将语法完全更改为:

pandas_dataframe.at[row_number, 'SomeColumnName'] = some_value
Run Code Online (Sandbox Code Playgroud)

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

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

小智 1

如果我正确理解你的意思,正如 @sammywemmy 提到的,你可以使用.loc.iloc来获取/更改任何行和列中的值。
如果数据帧行的顺序发生变化,您必须定义index通过其索引获取每一行(数据点),即使顺序已更改。
就像下面这样:

df = pd.DataFrame(index=['a', 'b', 'c'], columns=['time', 'date', 'name'])
Run Code Online (Sandbox Code Playgroud)

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

df.loc['a']     # equivalent to df.iloc[0]
Run Code Online (Sandbox Code Playgroud)