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)