pandas:df.loc[-1,col] 有时有效,有时使用 NAN 添加额外行

San*_*idi 3 pandas

我有一个熊猫数据框。我正在尝试修改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)

它添加了一个额外的行而不是替换krissomething

    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)

现在可以了。

有人可以解释发生了什么吗

jez*_*ael 5

您可以以不同方式选择最后一个值name- 如果索引值唯一,则用于索引的最后一个值DataFrame.locdf.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)