我正在尝试编写一个函数,使用户可以轻松地在pandas数据框中选择特定的单元格并更改其值。例如,在下面的数据框中,我希望用户能够按日期和操作选择一个单元格,例如“ 2018-03-02”和“ Manure”,并将值更改为“ 1”。
我已经在2018年3月2日完成了此操作,并使用此代码(数据框命名为q)“剪切”:
q.iat[1,1]=1
但是,我希望能够使用类似q.iat["2018-03-02", "Cutting"]=1
的方式来更改单元格,但是我不确定如何执行此操作,因为它说.iat
仅能识别整数位置。除了.iat
之外我还可以使用,还是需要为每个日期和每一列设置一个字典?
答案 0 :(得分:0)
您的数据框使用列名和索引建立索引。您可以使用
set_index:
df.set_index('date')
然后,同时使用日期索引和“剪切”列,通过.loc更改值:
df.loc('2018-03-02','Cutting') = 1
答案 1 :(得分:0)
pd.DataFrame.at
使用at
代替iat
进行基于标量标签的有效索引:
q.at['2018-03-02', 'Cutting'] = 1
索引编制的简短指南:
- 分别使用
iat
/at
用于按整数位置或标签进行标量访问/设置。- 分别使用
iloc
/loc
进行非标量访问/通过整数位置或标签进行设置。
答案 2 :(得分:0)
您可以使用熊猫的名称按名称选择列:
q['Manure']
为了选择行,您需要一个索引来唯一地标识它们,如果您确定其采用可以唯一标识的格式,则可以是日期。 例如:
q = q.set_index(pd.DatetimeIndex(q['Dates']))
然后您可以选择要执行的每个单元格
q.loc[<rowIndex>, <colName>]
答案 3 :(得分:-1)
您可以使用DataFrame.loc,这应该可以帮助您开始:https://pandas.pydata.org/pandas-docs/stable/indexing.html
在您的示例中:
q.loc["2018-03-02","Manure"]=1