我有一个熊猫数据框。我正在尝试修改name最后一行中的列值
我尝试
df.loc[-1,'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
这有效
df现在我用查询过滤几行并调用它df_query
我的最后一行df_query是
id name
21 965 kris
Run Code Online (Sandbox Code Playgroud)
我检查索引-1
df_query.loc['name'].iloc[-1]
Run Code Online (Sandbox Code Playgroud)
它显示“克里斯”
现在df_query我尝试
df_query.loc[-1,'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
它添加了一个额外的行而不是替换kris为something
id name
21 965.0 kris
-1 NaN "something"
Run Code Online (Sandbox Code Playgroud)
还将 id 转换为floatfromint
为什么有时有效有时无效
后来搜索后我发现/sf/answers/3465732861/
仅使用 iloc[-1, 'a] 不起作用,因为 -1 不在索引中。
我无法理解上面给出的原因
并说要尝试:
df_query.loc[df_query.loc.index[-1],'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
现在可以了。
有人可以解释发生了什么吗
您可以以不同方式选择最后一个值name- 如果索引值唯一,则用于索引的最后一个值DataFrame.loc:df.index
df.loc[df.index[-1],'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
或者如果使用通过以下方式DataFrame.iloc获取列的位置:nameIndex.get_loc
df.iloc[-1,df.columns.get_loc('name')] = "something"
Run Code Online (Sandbox Code Playgroud)
如果使用:
df.loc[-1,'name'] = "something"
Run Code Online (Sandbox Code Playgroud)
Pandas 尝试设置行(index=-1如果存在),否则使用索引创建新行-1。问题是,如果最后一个索引没有-1,但例如第一个索引,它取代的不是最后一行,而是第一行。
可能的用途也是如此:
#tested last value of index
if df.index[-1] == -1:
#last value is set
df.loc[-1,'name'] = "something"
#tested all values if index
elif (df.index == -1).any():
#some value with -1 is set
df.loc[-1,'name'] = "something"
else:
#new row with -1 is created
df.loc[-1,'name'] = "something"
Run Code Online (Sandbox Code Playgroud)