我有一个 Pandas 数据框。我正在尝试修改最后一行中的 name
列值
我试试
df.loc[-1,'name'] = "something"
这行得通
现在我使用查询从 df
中过滤几行并将其命名为 df_query
我在 df_query
中的最后一行是
id name
21 965 kris
我检查索引 -1
df_query.loc['name'].iloc[-1]
它显示“kris”
现在开始 df_query
我试试
df_query.loc[-1,'name'] = "something"
它添加了一个额外的行,而不是将 kris
替换为 something
id name
21 965.0 kris
-1 NaN "something"
还将 id 从 int
转换为 float
为什么有时能用有时不能用
搜索后我在 https://stackoverflow.com/a/49510469 找到了
Just using iloc[-1, 'a] won't work as -1 is not in the index.
我无法理解上面给出的原因
并说要尝试:
df_query.loc[df_query.loc.index[-1],'name'] = "something"
现在可以了。
谁能解释一下发生了什么
最佳答案
您可以通过不同的方式选择name
的最后一个值 - 如果使用 DataFrame.loc
如果索引值是唯一的,则使用 df.index
作为索引的最后一个值:
df.loc[df.index[-1],'name'] = "something"
或者如果使用 DataFrame.iloc
通过 Index.get_loc
获取 name
列的位置:
df.iloc[-1,df.columns.get_loc('name')] = "something"
如果使用:
df.loc[-1,'name'] = "something"
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"
关于pandas: df.loc[-1,col] 有时工作,有时用 NAN 添加额外的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66096734/